• Redis学习(1)


    redis基础的数据结构总共有5种,其它的命令和数据结构目前应用不到。他们分别为:
    字符串:String
    哈希:Hash
    列表:List
    集合:Set
    有序集合:ZSet
    每种数据结构的原理和我们平时使用的都差不多,因此这里不讲,如果有需要参考的,具体可以查看redis官网

    Java操作Redis最常用的2种数据结构

    基础配置

    由于本人直接宝塔部署了docker,在docker内pull了一个镜像创建并运行了redis最新版的容器。
    因此以后的操作其实都是对服务器内docker容器的操作。

    首先是我们需要用到的maven坐标,在spring应用启动项内点击:spring data redisjunit单元测试,fastjson阿里巴巴,lombok即可,再手动加入commons-pool2(跟随redis的东西)具体坐标如下

    <dependency>
                <groupId>com.alibabagroupId>
                <artifactId>fastjsonartifactId>
                <version>1.2.79version>
            dependency>
            <dependency>
                <groupId>org.apache.commonsgroupId>
                <artifactId>commons-pool2artifactId>
            dependency>
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-data-redisartifactId>
            dependency>
            <dependency>
                <groupId>org.junit.platformgroupId>
                <artifactId>junit-platform-launcherartifactId>
                <scope>testscope>
            dependency>
            <dependency>
                <groupId>junitgroupId>
                <artifactId>junitartifactId>
                <scope>testscope>
            dependency>
            <dependency>
                <groupId>org.projectlombokgroupId>
                <artifactId>lombokartifactId>
                <optional>trueoptional>
            dependency>
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-testartifactId>
                <scope>testscope>
                <exclusions>
                    <exclusion>
                        <groupId>org.junit.vintagegroupId>
                        <artifactId>junit-vintage-engineartifactId>
                    exclusion>
                exclusions>
            dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    然后redis的配置是以配置文件的方式进行更改的:

    spring:
      application:
        name: redis-demo
      redis:
        host: localhost # 自己的主机名
        port: 6379 # 6379
        password: password # 密码,如果没设置可以不加
        lettuce: # 这里我们默认使用lettuce
          pool: # 连接池设置
            max-active: 8 # 最大连接
            max-idle: 8 # 最大空闲连接
            min-idle: 0 # 最小空闲连接
            max-wait: 100  # 最大连接等待时间
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    接下来我们便可以再测试项/新写一个class进行对redis的操作了
    提前说一下,由于jdk以及springmvc内的序列化和反序列化方式过于繁琐冗余,因此我们使用阿里巴巴的fastjson,因此,我们引入的对象是StringRedisTemplate而不是RedisTemplate

    首先,需要引入并自动装配StringRedisTemplate

    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    
    • 1
    • 2

    然后,我们新建一个测试项来运行他

    1.String类型

    @Test
        void testString() {
            //插入一条string类型的数据,stringRedisTemplate内操作string的方法名叫opsForValue,然后set与get即可
            stringRedisTemplate.opsForValue().set("test", "it's a test data");
            //读取一条string类型的数据
            Object name = stringRedisTemplate.opsForValue().get("test");
            System.out.println(name);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    我们即可在RDM中发现数据已存入服务器内的redis
    在这里插入图片描述

    当然,对于自定义对象来说,就需要用到我们之前导入的fastjson来序列化和反序列化了

    @Test
        void testUserString() {
            //创建对象
            User user1 = new User();
            user1.setName("张三");
            user1.setAge(18);
            //写入数据,使用阿里巴巴的JSON.toJSONString()将自定义对象转化为json格式,再存入value中
            String user1String = JSON.toJSONString(user1);
            stringRedisTemplate.opsForValue().set("user1", user1String);
            //读取数据
            String getUser = stringRedisTemplate.opsForValue().get("user1");
            System.out.println(getUser);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    2.hash类型

    redis的哈希表相当于一个key可以对应多个字段的值
    也就是说,hashname-> hashkey -> hashvalue
    在代码中便可以这么写:

    @Test
        void testHashString() {
        //put三元素:hashname,hashkey,hashvalue
            stringRedisTemplate.opsForHash().put("userHash", "name", "虎哥");
            stringRedisTemplate.opsForHash().put("userHash", "age", "21");
    
            Object hashName = stringRedisTemplate.opsForHash().get("userHash", "name");
            //我们也可以使用entries方法来将指定的hashname内所有的键值对取出,即:取出时为一个json格式的map集合
            Map<Object, Object> userHash = stringRedisTemplate.opsForHash().entries("userHash");
            System.out.println(hashName);
            System.out.println(userHash);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

    他在RDM中的显示为这样:

    在这里插入图片描述

    以上即为redis最常用的2种数据结构,在实际项目开发中使用量非常的广泛。

  • 相关阅读:
    spring管理bean
    基于51单片机的全自动智能洗衣机控制系统Proteus仿真
    软件测试周刊(第83期):当你感觉忙得没时间休息,就是你最需要找时间休息的时候。 ​​​
    计算机毕业论文Java项目源码下载基于SSM实现的宠物销售网站
    【C++/类和对象/2023年10月3日】
    智达方通EPM,解决企业经营分析和管理难题
    Pytorch CPU版本安装教程
    ESP32设备驱动-OLED显示DHT11和DHT22传感器数据
    谈谈我的「数字文具盒」 - 数字基建
    python LeetCode 刷题记录 20
  • 原文地址:https://blog.csdn.net/qq_52480906/article/details/127585574