• Redis基本使用


    1.通用命令

    针对所有数据类型的操作可以在Redis官方文档查看。以下是通用的命令。

    KEYS:查看符合模板的所有key
    DEL:删除一个指定的key
    EXISTS:判断key是否存在
    EXPIRE:给一个key设置有效期,有效期到期时该key会被自动删除
    TTL:查看一个KEY的剩余有效期
    help [command]: 可以查看一个命令的具体用法
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2.基本数据类型

    2.1 String

    String类型,也就是字符串类型。
    根据字符串的格式不同,又可以分为3类:

    • string:普通字符串
    • int:整数类型,可以做自增、自减操作
    • float:浮点类型,可以做自增、自减操作
      不管是哪种格式,底层都是字节数组形式存储,只不过是编码方式不同。字符串类型的最大空间不能超过512MB
    SET:添加或者修改已经存在的一个String类型的键值对
    GET:根据key获取String类型的value
    MSET:批量添加多个String类型的键值对
    MGET:根据多个key获取多个String类型的value
    INCR:让一个整型的key自增1
    INCRBY:让一个整型的key自增并指定步长,例如:incrby num 2 让num值自增2
    INCRBYFLOAT:让一个浮点类型的数字自增并指定步长
    SETNX:添加一个String类型的键值对,前提是这个key不存在,否则不执行
    SETEX:添加一个String类型的键值对,并且指定有效期
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    关于SET命令的详细说明:
    上述命令中的SETNX,SETEX命令等价于SET key value NX … / SET key value EX…。

    SET K1 V1 EX 10 = SETNX K1 10 V1
    
    • 1

    官方文档中关于SET命令的说明

    SET key value [NX | XX] [GET] [EX seconds | PX milliseconds |
      EXAT unix-time-seconds | PXAT unix-time-milliseconds | KEEPTTL]
    
    
    //参数说明
    EX        //设置指定的过期时间,单位为秒(正整数)。
    PX        //设置指定的过期时间,单位为毫秒(正整数)。
    EXAT     //设置key过期的Unix时间,单位为秒(正整数)。Unix时间:从1970年1月1日00:00:00开始
    PXAT     //设置key过期的Unix时间,单位为毫秒(正整数)。
    NX       //仅在key不存在的情况下设置key。
    XX       //仅设置已经存在的key。
    KEEPTTL //保留与key相关的有效时间。
    GET     //返回键值处存储的旧字符串,如果键值不存在,则返回 nil。如果键值不是字符串,将返回错误并中止 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    2.2 Hash

    Hash类型的value是无序的字典,类似java中的HashMap。
    在这里插入图片描述

    HSET key field value:添加或者修改hash类型key的field的值
    HGET key field:获取一个hash类型key的field的值
    HMSET:批量添加多个hash类型key的field的值
    HMGET:批量获取多个hash类型key的field的值
    HGETALL:获取一个hash类型的key中的所有的field和value
    HKEYS:获取一个hash类型的key中的所有的field
    HVALS:获取一个hash类型的key中的所有的value
    HINCRBY:让一个hash类型key的字段值自增并指定步长
    HSETNX:添加一个hash类型的key的field值,前提是这个field不存在,否则不执行
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述
    在这里插入图片描述

    2.3 List

    Redis中的List类型与Java中的LinkedList类似,可以看做是一个双向链表结构。既可以支持正向检索和也可以支持反向检索。
    特征也与LinkedList类似:有序、元素可以重复、插入和删除快、查询速度一般
    常用来存储一个有序数据,例如:朋友圈点赞列表,评论列表等

    LPUSH key  element ... :向列表左侧插入一个或多个元素
    LPOP key:移除并返回列表左侧的第一个元素,没有则返回nil
    RPUSH key  element ... :向列表右侧插入一个或多个元素
    RPOP key:移除并返回列表右侧的第一个元素
    LRANGE key star end:返回一段角标范围内的所有元素
    LINDEX key index :返回存储在 key 中的列表中位于 index 索引处的元素。正整数表示从头部开始搜索,下标从0开始。负整数表示从末尾开始搜索,下标从-1开始。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    LPOS key element [RANK rank] [COUNT num-matches] [MAXLEN len] :
    
    返回匹配value对应的下标。RANK表示要返回查询到的第几个元素对应的下标,当rank为负数的时候表示从末尾开始查找。
    不指定的情况下返回第一个匹配元素的下标。COUNT表示返回count个匹配元素的下标,如果count=0表示返回所有匹配元素的下标。
    MAXLEN要匹配的数量最大值。
    
    > RPUSH mylist a b c 1 2 3 c c
    > LPOS mylist c
    2
    
    > LPOS mylist c RANK 2
    6
    
    > LPOS mylist c RANK -1
    7
    
    > LPOS mylist c COUNT 2
    [2,6]
    
    > LPOS mylist c RANK -1 COUNT 2
    [7,6]
    
    > LPOS mylist c COUNT 0
    [2,6,7]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    在这里插入图片描述
    在这里插入图片描述

    2.4 Set

    Set类型类似java中的HashSet类型,具有以下特点:无序、元素不可重复、查找快、支持交集、并集、差集等功能

    SADD key member ... :向set中添加一个或多个元素
    SREM key member ... : 移除set中的指定元素
    SCARD key: 返回set中元素的个数
    SISMEMBER key member:判断一个元素是否存在于set中
    SMEMBERS:获取set中的所有元素
    SINTER key1 key2 ... :求key1与key2的交集
    SDIFF key1 key2 ... :求key1与key2的差集,如果有key2 key3 那么就是key1与key2 key3并集的差集
    SUNION key1 key2 ..:求key1和key2的并集
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    在这里插入图片描述

    2.5 SortedSet

    SortedSet是可排序的Set。具有以下特点:可排序、元素不可重复、查询速度快

    • 注意:所有的排名默认都是升序,如果要降序则在命令的Z后面添加REV即可
    ZADD key score member:添加一个或多个元素到sorted set ,如果已经存在则更新其score值
    ZREM key member:删除sorted set中的一个指定元素
    ZSCORE key member : 获取sorted set中的指定元素的score值
    ZRANK key member:获取sorted set 中的指定元素的排名
    ZCARD key:获取sorted set中的元素个数
    ZCOUNT key min max:统计score值在给定范围内的所有元素的个数
    ZINCRBY key increment member:让sorted set中的指定元素自增,步长为指定的increment值
    ZRANGE key min max:按照score排序后,获取指定排名范围内的元素
    ZRANGEBYSCORE key min max:按照score排序后,获取指定score范围内的元素
    ZDIFFZINTERZUNION:求差集、交集、并集
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    3. SpringDataRedis

    3.1 简介

    SpringData是Spring中数据操作的模块,包含对各种数据库的集成,其中对Redis的集成模块就叫做SpringDataRedis

    • 提供了对不同Redis客户端的整合(Lettuce和Jedis)
    • 提供了RedisTemplate统一API来操作Redis
    • 支持Redis的发布订阅模型
    • 支持Redis哨兵和Redis集群
    • 支持基于Lettuce的响应式编程
    • 支持基于JDK、JSON、字符串、Spring对象的数据序列化及反序列化
    • 支持基于Redis的JDKCollection实现

    在这里插入图片描述

    3.2 快速代码示例

    # 配置
    spring:
      data:
        redis:
          port: 6379
          password: 123456
          host: 192.168.178.128
          lettuce:
            pool:
              max-active: 8 #最大连接
              max-idle: 8  #最大空闲连接
              min-idle: 0 # 最小空闲连接
              max-wait: 10 # 最大连接等待时间
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    //测试
    @SpringBootTest
    class SpringDataRedisApplicationTests {
    
        @Autowired
        private RedisTemplate redisTemplate;
    
        @Test
        void RedisTest() {
            redisTemplate.opsForHash().put("key","hashkey","hashvalue");
            Object hashValue = redisTemplate.opsForHash().get("key", "hashkey");
            System.out.println("hashValue: "+hashValue);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    3.3 序列化

    RedisTemplate可以接收任意Object作为值写入Redis,只不过写入和读取时会把Object序列化为字节形式,默认是采用JDK序列化,得到的结果如下 导致可读性差

    在这里插入图片描述
    解决方案:统一使用String序列化器,要求只能存储String类型的key和value。当需要存储Java对象时,手动完成对象的序列化和反序列化

    @SpringBootTest
    class SpringDataRedisApplicationTests {
    
        @Autowired
        private StringRedisTemplate stringRedisTemplate;
        
        private static  final ObjectMapper mapper=new ObjectMapper();
    
        @Test
        void StringTest() throws IOException {
            //准备对象
            User tom = new User("tom", 10);
            //手动序列化
            String userStr = mapper.writeValueAsString(tom);
            //写入数据到redis
            stringRedisTemplate.opsForValue().set("userKey",userStr);
            //读取数据
            String userValue = stringRedisTemplate.opsForValue().get("userKey");
            //反序列化
            User user = mapper.readValue(userValue, User.class);
            System.out.println(user);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    在这里插入图片描述

  • 相关阅读:
    零基础看深度学习python代码的基本方法
    作业-11.15
    SpringBoot快速入门
    2020蓝桥杯国赛B组-搬砖-(贪心排序+01背包)
    Linux常用基本命令大全
    Linux内核之tasklet机制
    GPT-1, GPT-2, GPT-3, InstructGPT / ChatGPT and GPT-4 总结
    linux c++ 开发 tensorrt 安装
    程序员过中秋 | 如何用代码绘制月亮?
    OGG-01224 Address already in use 问题
  • 原文地址:https://blog.csdn.net/weixin_43956248/article/details/136710761