外卖项目09---Redis了解

news2024/11/30 12:46:54

目录

Redis了解 141

一、Redis入门 143

1.1Redis简介 143

1.2Redis下载与安装 143

1.3Redis入门---Redis服务启动 144

1.3.1Redis服务启动  

1.3.2设置密码远程连接

二、Redis数据类型 145

三、Redis常用命令 146

3.1Redis常用命令---字符串string操纵命令

3.2Redis常用命令---哈希类型操作命令 147

3.3Redis常用命令---列表List类型操作命令 148

3.4Redis常用命令---集合类型&有序集合类型操作命令 149

​编辑3.5Redis常用命令---通用命令 150

四、在Java中操作Redis 151

4.1在Java中操作Redis介绍 151

4.2使用Spring Data Redis操作Redi基础环境&设置序列化器(SpringBoot中使用Redis)152

4.3在Java中操作Redis 使用Sping Data Redis操作Redis 数据类型操作(对应五种数据类型在SpringBoot中的操作) 153-155


Redis了解 141

Mysql:是将数据存到磁盘上,关系型数据库。实际上就是表的关系。

内存的读取速度比磁盘的读取速度快

Redis是讲数据存到内存上,非关系型数据库

优点:Redis处理速度比Mysql快

两者是相互补充的关系。

什么是热点:

热点就是短时间内会有大量用户点击或者使用的情况。

一、Redis入门 143

1.1Redis简介 143

作用:当作缓存数据库使用。 

 

1.2Redis下载与安装 143

 Linux版本的安装:

 gcc:是在Linux系统中,对c语言进行编译的一个指令

 Windows下Redis安装:

1.3Redis入门---Redis服务启动 144

1.3.1Redis服务启动  

Linxu服务启动: 

 

输入下面的指令:在所在的工作空间下启动就能够启动Redis服务

步骤一:启动Redis服务

步骤二:连接服务器redis-cli(先进入到文件所在工作空间下)

步骤三:可以查询当前的Redis里面存在哪些key

 

 后台启动Redis服务程序步骤:

步骤一:找到配置文件 

步骤二:通过小技巧“/所要找的文件名称”

就能够实现找到所需要的内容信息。

步骤三:输入字母 “i”,变为插入模式,对文件进行修改

 注:将该部分的no修改为yes

记得输入“:wq”保存并退出。

步骤四:启动服务器,并要加上redis.config文件

 

Window服务启动: 

 注:不需要密码校验。

1.3.2设置密码远程连接

Linxu系统设置客户端登陆密码:

步骤一:在redis.conf文件夹下找到密码,并打开文件

 

 步骤二:修改密码,并保存

 实现步骤:

方式一: 

方式二:

设置Redis可以被远程连接:

修改redis.conf文件,最后按下esc键,进行保存并退出。 

二、Redis数据类型 145

 

三、Redis常用命令 146

3.1Redis常用命令---字符串string操纵命令

1、将数据值存到value中,使用set指令的数据结果都是字符串的形式。key相同的情况下,同时设置,后面的会覆盖前面的数据内容。

2、获取

3、将数据存到value中,延迟一段时间(可设置)就可以实现将数据进行清理掉

作用:手机验证码的使用,存在一个有效期。

4、作用:用于分布式锁的使用

3.2Redis常用命令---哈希类型操作命令 147

 

field:字段

value:值

3.3Redis常用命令---列表List类型操作命令 148

1、从头部一个个按顺序向后插入

3、移除操作,相当于是取出元素的功能

3.4Redis常用命令---集合类型&有序集合类型操作命令 149

2、查询集合中的元素,元素是无序排列的。没有顺序。

4、查询两个集合的交集的部分。

5、查询两个集合的并集,并表示输出出来。

6、查询两个集合的差集。这个命令两个集合的顺序是有要求的,是前面的集合后面的集合

 

结果:剩余的是:前面的集合中的内容在后面集合中不存在的内容。

 

 

 

3.5Redis常用命令---通用命令 150

 

 

四、在Java中操作Redis 151

4.1在Java中操作Redis介绍 151

步骤一:导入maven坐标

 

步骤二:在IDEA中与Redis进行连接:分为三部分组成

public class JedisTest {

    @Test
    public void testRedis(){
        //1、获取连接
        Jedis jedis = new Jedis("localhost",6379);

        //2、执行具体的操作
        //2-1String数据
        jedis.set("username","xiaoming");
        String value = jedis.get("username");
        System.out.println(value);
        
//        jedis.del("username");//删除key
        //2-2哈希值数据
        jedis.hset("myhash","addr","bj");
        String hValue = jedis.hget("myhash", "addr");
        System.out.println(hValue);
        

        //2-3查询所有的Redis的key
        Set<String> keys = jedis.keys("*");
        for (String key : keys) {
            System.out.println(key);
        }

        //3、关闭连接
        jedis.close();


    }

4.2使用Spring Data Redis操作Redi基础环境&设置序列化器(SpringBoot中使用Redis)152

 实际上:就是在SpringBoot中进行使用Redis 

 

 注:封装的是五类,对应的是Redis中的五种数据类型。

.yaml设置: 

 

Redis默认提供了16个数据库。默认选择的是0号数据库。

如果需要修改的话,需要在对应的下面该文件进行修改处理。 

RedisTemplate对象:

该对象也没有进行服务层的创建,是因为下面这个配置好之后,SpringBoot就会自动配置好这个对象。

 实际操作:要选择.yaml中Redis配置好的对应的数据库号

是对RedisTemplate序列化之后: 查询得到的是1)中的内容

取消RedisTemplate的序列化操作,需要进行如下的处理:

添加下面一个类:类的信息如下所示:创造自己需要的方法对象redisTemplate,默认的是有序列化的功能实现。(对key的序列化器进行的改造)

4.3在Java中操作Redis 使用Sping Data Redis操作Redis 数据类型操作(对应五种数据类型在SpringBoot中的操作) 153-155

第二大部分。 

 

@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataRedisTest {

    @Autowired
    private RedisTemplate redisTemplate;

    /**
     * 操作String类型数据
     */
    @Test
    public void testString(){
        redisTemplate.opsForValue().set("city123","beijing");

        String value = (String) redisTemplate.opsForValue().get("city123");
        System.out.println(value);

        redisTemplate.opsForValue().set("key1","value1",10l, TimeUnit.SECONDS);//设置延长时间,一段时间后内容会自动清空

        Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent("city1234", "nanjing");
        System.out.println(aBoolean);
    }

    /**
     * 操作Hash类型数据
     */
    @Test
    public void testHash(){
        HashOperations hashOperations = redisTemplate.opsForHash();

        //存值
        hashOperations.put("002","name","xiaoming");
        hashOperations.put("002","age","20");
        hashOperations.put("002","address","bj");

        //取值
        String age = (String) hashOperations.get("002", "age");
        System.out.println(age);

        //获得hash结构中的所有字段
        Set keys = hashOperations.keys("002");
        for (Object key : keys) {
            System.out.println(key);
        }

        //获得hash结构中的所有值
        List values = hashOperations.values("002");
        for (Object value : values) {
            System.out.println(value);
        }
    }

    /**
     * 操作List类型的数据
     */
    @Test
    public void testList(){
        ListOperations listOperations = redisTemplate.opsForList();

        //存值
        listOperations.leftPush("mylist","a");
        listOperations.leftPushAll("mylist","b","c","d");

        //取值
        List<String> mylist = listOperations.range("mylist", 0, -1);
        for (String value : mylist) {
            System.out.println(value);
        }

        //获得列表长度 llen
        Long size = listOperations.size("mylist");
        int lSize = size.intValue();
        for (int i = 0; i < lSize; i++) {
            //出队列
            String element = (String) listOperations.rightPop("mylist");
            System.out.println(element);
        }
    }

    /**
     * 操作Set类型的数据
     */
    @Test
    public void testSet(){
        SetOperations setOperations = redisTemplate.opsForSet();

        //存值
        setOperations.add("myset","a","b","c","a");

        //取值
        Set<String> myset = setOperations.members("myset");
        for (String o : myset) {
            System.out.println(o);
        }

        //删除成员
        setOperations.remove("myset","a","b");

        //取值
        myset = setOperations.members("myset");
        for (String o : myset) {
            System.out.println(o);
        }

    }

    /**
     * 操作ZSet类型的数据
     */
    @Test
    public void testZset(){
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();

        //存值
        zSetOperations.add("myZset","a",10.0);
        zSetOperations.add("myZset","b",11.0);
        zSetOperations.add("myZset","c",12.0);
        zSetOperations.add("myZset","a",13.0);

        //取值
        Set<String> myZset = zSetOperations.range("myZset", 0, -1);
        for (String s : myZset) {
            System.out.println(s);
        }

        //修改分数
        zSetOperations.incrementScore("myZset","b",20.0);

        //取值
        myZset = zSetOperations.range("myZset", 0, -1);
        for (String s : myZset) {
            System.out.println(s);
        }

        //删除成员
        zSetOperations.remove("myZset","a","b");

        //取值
        myZset = zSetOperations.range("myZset", 0, -1);
        for (String s : myZset) {
            System.out.println(s);
        }
    }

    /**
     * 通用操作,针对不同的数据类型都可以操作
     */
    @Test
    public void testCommon(){
        //获取Redis中所有的key
        Set<String> keys = redisTemplate.keys("*");
        for (String key : keys) {
            System.out.println(key);
        }

        //判断某个key是否存在
        Boolean itcast = redisTemplate.hasKey("itcast");
        System.out.println(itcast);

        //删除指定key
        redisTemplate.delete("myZset");

        //获取指定key对应的value的数据类型
        DataType dataType = redisTemplate.type("myset");
        System.out.println(dataType.name());

    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/41175.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

现代密码学导论-21-分组密码

目录 3.6.3分组密码及其操作模式 ECB(Electronic Code Book) 电码本模式 CBC(Cipher Block Mode) 密文分组链接方式 THEOREM 3.32 CBC模式的CPA安全 连锁CBC模式 OFB(Output Feedback Mode) 输出反馈模式 CTR(Counter) 计数器模式 THEOREM 3.33 CTR多明文PCA安全 THE…

C语言学习之路(基础篇)—— 复合类型(自定义类型)

说明&#xff1a;该篇博客是博主一字一码编写的&#xff0c;实属不易&#xff0c;请尊重原创&#xff0c;谢谢大家&#xff01; 结构体 1) 概述 数组&#xff1a;描述一组具有相同类型数据的有序集合&#xff0c;用于处理大量相同类型的数据运算。 结构体&#xff1a;将多个…

工具分享:Springboot+Netty+Xterm搭建一个网页版的SSH终端

一. 简述 搭建一个web ssh&#xff0c;主要是借助websocket和xterm&#xff0c;可以实现一个类似于xshell的效果&#xff0c;如图&#xff1a; 二. 技术栈 这里使用了springboot、netty、jsch、react、Ts,xterm。 这里我用了springboot和netty实现了websocket&#xff0c;js…

稳了,我用 Python 可视化分析和预测了 2022 年 FIFA 世界杯

许多人称足球为 “不可预测的游戏”&#xff0c;因为一场足球比赛有太多不同的因素可以改变最后的比分。 预测一场比赛的最终比分或赢家确实是很难的&#xff0c;但在预测一项比赛的赢家时就不是这样了。在过去的5年中&#xff0c;Bayern Munich 赢得了所有的德甲联赛&#xf…

如何发布一个属于自己的 npm 包

如何发布一个属于自己的 npm 包 start 在日常的工作中&#xff0c;我们会接触很多 npm 包。 例如&#xff1a; npm install jquerynpm install vue/clinpm install axios# ... 等等有时候会想到&#xff0c;构建一个属于自己的 npm 包&#xff0c;应该超级酷吧&#xff1f; …

zabbix基础环境部署

目录 一、环境准备 二、部署LNMP 1、安装Nginx及其依赖包 2、修改nginx配置 3、测试页面 三、部署zabbix服务端 1、下载zabbix 2、安装源码zabbix 3、为zabbix创建数据库与数据库账户 4、搭建Zabbix页面 4.1、第1步 Check of pre-requisites 4.2、第2步 Configure D…

Python代码的编写运行方式

Python代码的编写运行方式介绍 python官方运行环境可到网站https://www.python.org/downloads/找到合适版本下载安装。 安装比较容易&#xff0c;特别强调&#xff0c;安装过程建议勾选“Add Python to PATH”&#xff08;将Python添加到PATH环境变量&#xff09;【注1】&…

Docker安装Minio

寻找Minio镜像 Docker Hub 查找官方镜像 下载Minio镜像 下载最新版Minio镜像 docker pull minio/minio等同于 docker pull minio/minio:latest下载指定版本的Minio镜像 docker pull minio/minio:RELEASE.2022-11-26T22-43-32Z.fips检查当前所有Docker下载的镜像 docker …

第六章TCP/IP——网络传输硬件设备

个人简介&#xff1a;云计算网络运维专业人员&#xff0c;了解运维知识&#xff0c;掌握TCP/IP协议&#xff0c;每天分享网络运维知识与技能。个人爱好: 编程&#xff0c;打篮球&#xff0c;计算机知识个人名言&#xff1a;海不辞水&#xff0c;故能成其大&#xff1b;山不辞石…

Linux进程通信之消息队列

目录 1.消息队列的原理&#xff1a; 2.消息队列的接口&#xff1a; &#xff08;1&#xff09;创建消息队列 &#xff08;2&#xff09;向消息队列发送消息 &#xff08;3&#xff09;接收消息 &#xff08;4&#xff09;操作消息队列的接口 1.消息队列的原理&#xff1a; 消…

docker 安装 Heimdall 导航页

前言 随着群晖中使用的功能越来越多&#xff0c;各种端口太多容易忘&#xff0c;所以就有了使用导航页的想法&#xff08;使用收藏夹的朋友除外&#xff09;。群晖也有自带的WEB套件管理&#xff0c;不过个人感觉相对麻烦&#xff0c;使用 Heimdall 导航页可以设置密码登录&am…

【数字信号调制】16QAM信号调制解调【含Matlab源码 2050期】

⛄一、QAM调制与解调&#xff08;附实验题目说明&#xff09; 1 引 言 数字振幅调制、数字频率调制和数字相位调制是数字调制的基础,然而,这3种数字调制方式都存在不足之处。如频谱利用率低、抗多径衰落能力差、功率谱衰减慢、带外辐射严重等。为了改善这些不足,几十年来人们不…

yocto machine class解析之st-partitions-image

yocto machine class解析之st-partitions-image stm32mp157 yocto的meta-st-stm32mp layer中提供了几个class,后续几篇文章重点分析这些class文件&#xff1a; 第一篇就从st-partitions-image.bbclass 开始&#xff0c;st所有创建image的bb文件都会引用st-partitions-image&am…

「UWB」精准定位黑科技,开启座舱雷达新蓝海

基于厘米级定位、超低功率、强抗干扰、超大容量等技术特点&#xff0c;UWB&#xff08;超宽带&#xff09;技术在消费电子、智能汽车等领域的应用前景被赋予厚望。 值得一提的是&#xff0c;利用UWB雷达还可实现舱内活体检测、脚踢尾箱等&#xff0c;这意味着新一轮座舱感知革…

【Vue】ref引用,插槽

一、ref 什么是ref&#xff1f; ref用来辅助开发者在不依赖于jQuery 的情况下&#xff0c;获取DOM元素或组件的引用。 每个vue的组件实例上&#xff0c;都包含一个$refs对象&#xff0c;里面存储着对应的DOM元素或组件的引用。默认情况下&#xff0c;组件的$refs 指向一个空对…

Ubuntu20.04下安装nvidia驱动

ubuntu-drivers devices会显示你的电脑上可用的nvidia驱动。只需要安装推荐的版本即可&#xff08;后面有recommend字样&#xff09; 打开电脑里的软件和更新app&#xff08;这里建议换提前换源&#xff0c;阿里源或者清华源&#xff09; 来到附加驱动这个页面&#xff0c;选…

HTML初识-概念和基本知识

1 . HTML初识-基础认知 HTML标签 1.1 目录 ◆ 基础认知 ◆ HTML标签学习 ◆ 综合案例 1.2 学习目标 ◆ 能够理解HTML的 基本语法 和标签的关系 ◆ 能够使用 排版标签 实现网页中标题、段落等效果 ◆ 能够使用 相对路径 选择不同目录下的文件 ◆ 能够使用 媒体标签 在网页中显示…

ES进阶教程

1.分片Shards 一个索引可以存储超出单个结点硬件限制的大量数据,es提供了将索引划分为多份的能力,每一份都称之为分片.当创建索引时,可以指定想要的分片数量.每个分片本身也是一个功能完善并且相对独立的索引.这个索引可以被放在集群中的任何结点上. 分片的重要性 1.允许水平切…

相控阵天线(九):平面阵列天线综合(不可分离型切比雪夫分布、圆口径泰勒综合、可分离型分布、配相抵消法)

目录简介不可分离型分布不可分离型切比雪夫圆口径泰勒综合可分离型分布可分离切比雪夫综合可分离泰勒综合平面阵列配相抵消法简介 按行、列排列的可分离型矩形平面阵&#xff0c;其阵因子是两个正交排列的直线阵阵因子的乘积。可分离的平面阵方向图在两个主面内是满足预期副瓣…

Docker创建Spring容器【方便服务迁移】

&#x1f4c3;目录跳转&#x1f4da;简介&#xff1a;&#x1f383; 1.上传jar包&#x1f389;2.创建Dockerfile文件&#x1f5fa;️3.生成容器&#x1f365;4.查看本地镜像&#x1f680;5.运行镜像&#x1f52d;6.使用工具访问接口&#x1f3c6;总结&#x1f4da;简介&#xf…