redis 数据类型常用命令和应用场景

redis 笔记

1. string

1.1 string常用命令

  • set,get

    127.0.0.1:6379> set user:key userValue
    OK
    127.0.0.1:6379> get user:key
    "userValue"
    
  • mset,mget

    假如我要存储多个key value, 如用户信息 {“name”:“zhangsan”,“age”:“12”,“password”:“123456”}

    用set,get的话,需要1.取出json 2.解析json 3.修改json 4.转成json 5.进行存储

    用mget 和mset 就特别方便

    127.0.0.1:6379> mset user:zhangsan:name zhangsan user:zhangsan:age 12 user:zhangsan:password 123456
    OK
    # 取出所有字段
    127.0.0.1:6379> mget user:zhangsan:name user:zhangsan:age  user:zhangsan:password
    1) "zhangsan"
    2) "12"
    3) "123456"
    # 修改其中一个字段
    127.0.0.1:6379> mset user:zhangsan:age 15
    OK
    127.0.0.1:6379> mget user:zhangsan:name user:zhangsan:age  user:zhangsan:password
    1) "zhangsan"
    2) "15"
    3) "123456"
    
  • setnx 当有当前key时,不做任何操作, 当没有时,做插入操作

    127.0.0.1:6379> setnx nxtest nxvalue
    (integer) 1
    127.0.0.1:6379> get nxtest
    "nxvalue"
    127.0.0.1:6379> setnx nxtest nxvalue123
    (integer) 0
    127.0.0.1:6379> get nxtest
    "nxvalue"
    
  • incr 计数器

    127.0.0.1:6379> incr article:readcount:1001
    (integer) 1
    127.0.0.1:6379> incr article:readcount:1001
    (integer) 2
    127.0.0.1:6379> incr article:readcount:1001
    (integer) 3
    127.0.0.1:6379> incr article:readcount:1001
    (integer) 4
    127.0.0.1:6379> get article:readcount:1001
    "4"
    

1.2 string 的应用场景

  • springsession

  • 分表里面的维护全局序列号

    1. 每次取出1000个id

      127.0.0.1:6379> incrby sequence:tablename 1000
      (integer) 1000
      127.0.0.1:6379>  incrby sequence:tablename 100
      (integer) 1100
      127.0.0.1:6379>  incrby sequence:tablename 1000
      (integer) 2100
      
    2. 将1000个数据存到本地缓存

      比如:取出的数据是2100,则可以使用的id范围是 1100 ~ 2100

    3. 用完了再次获取

2. hash

2.1 hash 常用命令

结构为,key-map

  • hset 设置map 属性 hset key field value

    127.0.0.1:6379> hset hash:user:zhangsan name zhangsan
    (integer) 1
    127.0.0.1:6379> hset hash:user:zhangsan age 12
    (integer) 1
    
  • hget 取出value的值 hget key fied

    127.0.0.1:6379> hget hash:user:zhangsan name
    "zhangsan"
    
  • hsetnx 存储一个不存在的map hsetnx key field value

    127.0.0.1:6379> hsetnx hsetnx:user:zhangsan name zhangsan
    (integer) 1
    127.0.0.1:6379> hget hsetnx:user:zhangsan name
    "zhangsan"
    127.0.0.1:6379> hsetnx hsetnx:user:zhangsan name zhangsan123
    (integer) 0
    127.0.0.1:6379> hget hsetnx:user:zhangsan name
    "zhangsan"
    
  • hmset 多个键值对一块存储 hmset key field1 value1 field2 value2

    127.0.0.1:6379> hmset hmset:user name zhangsan age 14 password 123456
    OK
    127.0.0.1:6379> hget hmset:user name
    "zhangsan"
    127.0.0.1:6379>
    
  • hmget 多个键值对一块取 hmget key field1 field2 field3

    127.0.0.1:6379> hmget hmset:user name age password
    1) "zhangsan"
    2) "14"
    3) "123456"
    
  • hdel 删除hash表中 field的值 hdel key field [field …]

    127.0.0.1:6379> hdel  hmset:user name password
    (integer) 2
    127.0.0.1:6379> hmget hmset:user name age password
    1) (nil)
    2) "14"
    3) (nil)
    127.0.0.1:6379>
    
  • hlen 返回hash表中field的数量 hlen key

    127.0.0.1:6379> hlen  hmset:user
    (integer) 1
    
  • hgetall 返回所有hash表中所有的键值 hgetall key

    127.0.0.1:6379> hmset hmset:user name zhangsan age 14 password 123456
    OK
    127.0.0.1:6379> hgetall hmset:user
    1) "age"
    2) "14"
    3) "name"
    4) "zhangsan"
    5) "password"
    6) "123456"
    
  • hincrby 为hash表中field中的值加上增量 increment hincrby key field

    127.0.0.1:6379> hincrby hmset:user increment 10
    (integer) 10
    127.0.0.1:6379>  hget hmset:user increment
    "10"
    

2.2 hash应用场景

  • 购物车的实现

    1. 以用户id为key,商品id为field ,商品数量为value

    2. 添加购物车 添加 商品id为1001 到zhangsan的购物车,添加数量为1

      127.0.0.1:6379> hset car:zhangsan 1001 1
      (integer) 1
      127.0.0.1:6379> hget car:zhangsan 1001
      "1"
      
    3. 增加数量 将zhangsan的购物车中的商品id为1001的 增加一个

      127.0.0.1:6379> hincrby car:zhangsan 1001 1
      (integer) 2
      
    4. 购物车中的商品总数 获取zhangsan购物车中的商品的总数

    # 之前增加了 10011002 两个商品
    127.0.0.1:6379> hlen car:zhangsan
    (integer) 2
    
    1. 删除商品 移除 zhangsan购物初中id为1001的商品

      127.0.0.1:6379> hdel car:zhangsan 1001
      (integer) 1
      
    2. 获取所有商品列表 获取zhangsan购物车的所有列表

      127.0.0.1:6379> hgetall car:zhangsan
      1) "1002"
      2) "1"
      

3. list

3.1 list 常用命令

  • lpush 将一个或多个插入到列表的左侧 lpush key value [value …]

    127.0.0.1:6379> lpush lpush:info zhangsan lisi wangwu
    (integer) 3
    
  • rpush 将一个或多个插入到列表的右侧 rpush key value [value …]

    127.0.0.1:6379> rpush lpush:info aa bb cc
    (integer) 6
    
  • lpop 移除最左头元素,并返回移除的元素 lpop key

    127.0.0.1:6379> lpop lpush:info
    "wangwu"
    
  • rpop 移除最右侧头元素,并返回移除的元素 rpop key

    127.0.0.1:6379> rpop lpush:info
    "cc"
    
  • lreange 返回区间范围的列表 lrange key start end

    # 目前里面的元素从左至右依次是 lisi,zhangsan,aa,bb
    127.0.0.1:6379> lrange lpush:info 2 3
    1) "aa"
    2) "bb"
    127.0.0.1:6379>  lrange lpush:info 1 3
    1) "zhangsan"
    2) "aa"
    3) "bb"
    127.0.0.1:6379> lrange lpush:info 0 3
    1) "lisi"
    2) "zhangsan"
    3) "aa"
    4) "bb"
    
  • blpop 从key列表中弹出左侧第一个元素,若列表中没有该元素,阻塞等到timeout秒,如果timeout=0,则一直阻塞 blpop key [key…] timeout

    # 一直阻塞
    127.0.0.1:6379>  blpop blpush:info 0
        
    # 向blpush:info添加 zhangsan
    127.0.0.1:6379> lpush blpush:info zhangsan
    (integer) 1
        
    # 弹出第一个元素
    127.0.0.1:6379>  blpop blpush:info 0    
    1) "blpush:info"
    2) "zhangsan"
    (34.55s)
    
  • brpop 从key列表中弹出右侧第一个元素,若列表中没有该元素,阻塞等到timeout秒,如果timeout=0,则一直阻塞 brpop key [key…] timeout

    # 一直阻塞
    127.0.0.1:6379>  brpop brpush:info 0
        
    # brpush:info添加 zhangsan
    127.0.0.1:6379> lpush brpush:info aa
    (integer) 1
        
    # 弹出第一个元素
    127.0.0.1:6379>  brpop brpush:info 0    
    1) "brpush:info"
    2) "aa"
    (12.55s)
    

3.2 list 应用场景

  • stack 栈

    Stack = lpush + lpop 先进后出

  • queue队列

    Queue = lpush + rpop 先进先出

  • blocking mq 阻塞队列

    Blocking MQ = lpush + brpop

4. set

4.1set 常用命令

  • sadd 往集合key中存入元素,若元素存在则忽略,不存在的新增

    sadd key member [member…]

    127.0.0.1:6379> sadd set:info zhangsan lisi wangwu
    (integer) 3
    # 此处因为zhangsan已经存在,则忽略
    127.0.0.1:6379> sadd set:info zhangsan aa
    (integer) 1
    
  • srem 从集合key中删除元素

    srem key member [members]

    127.0.0.1:6379> srem set:info aa
    (integer) 1
    
  • smembers 获取key中所有元素

    smembers key

    127.0.0.1:6379> smembers set:info
    1) "zhangsan"
    2) "wangwu"
    3) "lisi"
    
  • scard 获取元素的个数

    scard key

    127.0.0.1:6379> scard set:info
    (integer) 3
    
  • sismember 判断元素是否在集合中

    sismember key member

    127.0.0.1:6379> sismember set:info zhangsan
    (integer) 1
    
  • srandmember 从集合key中随机选出count个元素,元素不从key中删除

    srandmember key count

    127.0.0.1:6379> srandmember set:info 2
    1) "lisi"
    2) "wangwu"
    127.0.0.1:6379> srandmember set:info 2
    1) "lisi"
    2) "wangwu"
    127.0.0.1:6379> srandmember set:info 2
    1) "zhangsan"
    2) "lisi"
    
  • spop 从集合key中随机选出count个元素,元素从key中删除

    spop key count

    127.0.0.1:6379> smembers set:info
    1) "zhangsan"
    2) "wangwu"
    3) "lisi"
    127.0.0.1:6379> spop set:info 1
    1) "zhangsan"
    127.0.0.1:6379> smembers set:info
    1) "wangwu"
    2) "lisi"
    127.0.0.1:6379>
    
  • sinter 交集运算

    sinter key [key…]

    127.0.0.1:6379> sadd set:01 aa bb cc
    (integer) 3
    127.0.0.1:6379> sadd set:02 bb cc dd
    (integer) 3
    127.0.0.1:6379> sinter set:01 set:02
    1) "cc"
    2) "bb"
    127.0.0.1:6379>
    
  • sinterstore 将交集运算存入新的集合中

    sinterstote newKey key [key…]

    127.0.0.1:6379> sinterstore set:03 set:01 set:02
    (integer) 2
    127.0.0.1:6379> smembers set:03
    1) "bb"
    2) "cc"
    
  • sunion 并集运算

    sunion key [keys]

    127.0.0.1:6379> sunion set:01 set:02
    1) "dd"
    2) "cc"
    3) "bb"
    4) "aa"
    
  • sunionstore 将并集运算存入新的集合中

    sunionstore newkey key [key…]

    127.0.0.1:6379> sunionstore set:04 set:01 set:02
    (integer) 4
    127.0.0.1:6379> smembers set:04
    1) "dd"
    2) "cc"
    3) "bb"
    4) "aa"
    
  • sdiff 差集运算

    sdiff key [key…]

    127.0.0.1:6379> sdiff set:01 set:02
    1) "aa"
    
  • sdiffstore 将差集运算存入新的集合中

    sdiffstore newkey key [key…]

    127.0.0.1:6379> sdiffstore set:05 set:01 set:02
    (integer) 1
    127.0.0.1:6379> smembers set:05
    1) "aa"
    127.0.0.1:6379>
    

4.2 set应用场景

  • 抽奖小程序

    1. 点击参与抽奖

      sadd key userId

    2. 查看参与抽奖所有用户

      smembers key

    3. 抽取count名中中奖者

      srandmember key count / spop key count

  • 微信,微博点赞收藏标签

    1. 点赞

      sadd like:{消息id} userID

    2. 取消点赞

      srem like:{消息id} userID

    3. 检查用户是否点过赞

      sismember like:{消息id} userID

    4. 获取点赞的用户列表

      smembers like:{消息id}

    5. 获取顶赞用户数

      scard like:{消息id}

5. zset

5.1 zset 常用命令

  • zadd 往有序集合中加入带分值元素

zadd key score member [score member …]

127.0.0.1:6379> zadd zset:info 1 zhangsan 2 lisi 3 wangwu
(integer) 3
  • zrem 删除元素

    zrem key member [member…]

    127.0.0.1:6379> zrem zset:info zhangsan
    (integer) 1
    127.0.0.1:6379> zrange zset:info 0 10
    1) "lisi"
    2) "wangwu"
    
  • zscore 返回member的分值

    zscore key member

    127.0.0.1:6379>  zscore zset:info lisi
    "2"
    
  • zincrby 为member增加分值

    zincrby key increment menber

    127.0.0.1:6379> zincrby zset:info 2 lisi
    "4"
    127.0.0.1:6379> zscore zset:info lisi
    "4"
    
  • zcard 返回集合中元素的个数

    zcard key

    127.0.0.1:6379> zcard zset:info
    (integer) 2
    
  • zrange 正序获取集合中 从start 到stop 下表的元素

    zrange key start stop

    127.0.0.1:6379> zadd zset:01 1 aa 2 bb 3 cc 4 dd 5 ee 6 ff
    (integer) 6
    127.0.0.1:6379> zrange zset:01 2 3
    1) "cc"
    2) "dd"
    
  • zrevrange 倒序获取集合中 从start 到stop 下表的元素

    zrevrange key start stop

    127.0.0.1:6379> zrevrange zset:01 2 3
    1) "dd"
    2) "cc"
    
  • zunionstore 并集计算,将计算的结果存入新的key

    zunionstore newkey numkeys key [key…] numkeys:计算key的数量,本次为2

    127.0.0.1:6379> zadd zset:01 1 aa 2 bb 3 cc 4 dd 5 ee 6 ff
    (integer) 6
    127.0.0.1:6379> zadd zset:02 4 dd 5 ee 6 ff 7 gg 8 hh
    (integer) 5
    127.0.0.1:6379> zunionstore zset:03 2 zset:01 zset:02
    (integer) 8
    
  • zinterstore 交集计算 将计算的结果存入新的key

    zinterstore newkey numkeys key [key…] numkeys:计算key的数量,本次为2

    127.0.0.1:6379> zinterstore zset:04 2 zset:01 zset:02
    (integer) 3
    

5.2 zset 应用场景

  • 热搜排行榜

    1. 点击新闻

      zincrby hotNews:20201101 1 守护香港

    2. 展示当日排行前十

      zrevrange hotNews:20201101 0 9 withscores

    3. 七日搜索榜单计算

      zunionstore hotNews:20201101-20201107 7 hotNews:20201101 hotNews:20201102 …hotNews:20201107

    4. 展示七日排行前十

      zrevrange hotNews:20201101-20201107 0 9 withscores

猜你喜欢

转载自blog.csdn.net/jinian2016/article/details/109410228