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

朴灿烈づ我的快乐病毒、 2022-11-21 11:27 288阅读 0赞

redis 笔记

1. string

1.1 string常用命令

  • set,get

    1. 127.0.0.1:6379> set user:key userValue
    2. OK
    3. 127.0.0.1:6379> get user:key
    4. "userValue"
  • mset,mget

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

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

    用mget 和mset 就特别方便

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

    1. 127.0.0.1:6379> setnx nxtest nxvalue
    2. (integer) 1
    3. 127.0.0.1:6379> get nxtest
    4. "nxvalue"
    5. 127.0.0.1:6379> setnx nxtest nxvalue123
    6. (integer) 0
    7. 127.0.0.1:6379> get nxtest
    8. "nxvalue"
  • incr 计数器

    1. 127.0.0.1:6379> incr article:readcount:1001
    2. (integer) 1
    3. 127.0.0.1:6379> incr article:readcount:1001
    4. (integer) 2
    5. 127.0.0.1:6379> incr article:readcount:1001
    6. (integer) 3
    7. 127.0.0.1:6379> incr article:readcount:1001
    8. (integer) 4
    9. 127.0.0.1:6379> get article:readcount:1001
    10. "4"

1.2 string 的应用场景

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

    1. 每次取出1000个id

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

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

    3. 用完了再次获取

2. hash

2.1 hash 常用命令

结构为,key-map

  • hset 设置map 属性 hset key field value

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

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

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

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

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

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

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

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

    1. 127.0.0.1:6379> hincrby hmset:user increment 10
    2. (integer) 10
    3. 127.0.0.1:6379> hget hmset:user increment
    4. "10"

2.2 hash应用场景

  • 购物车的实现

    1. 以用户id为key,商品id为field ,商品数量为value
    2. 添加购物车 添加 商品id为1001 到zhangsan的购物车,添加数量为1

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

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

      之前增加了 1001和1002 两个商品

      127.0.0.1:6379> hlen car:zhangsan
      (integer) 2

    5. 删除商品 移除 zhangsan购物初中id为1001的商品

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

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

3. list

3.1 list 常用命令

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

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

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

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

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

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

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

    1. # 一直阻塞
    2. 127.0.0.1:6379> brpop brpush:info 0
    3. # brpush:info添加 zhangsan
    4. 127.0.0.1:6379> lpush brpush:info aa
    5. (integer) 1
    6. # 弹出第一个元素
    7. 127.0.0.1:6379> brpop brpush:info 0
    8. 1) "brpush:info"
    9. 2) "aa"
    10. (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…]

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

    srem key member [members]

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

    smembers key

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

    scard key

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

    sismember key member

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

    srandmember key count

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

    spop key count

    1. 127.0.0.1:6379> smembers set:info
    2. 1) "zhangsan"
    3. 2) "wangwu"
    4. 3) "lisi"
    5. 127.0.0.1:6379> spop set:info 1
    6. 1) "zhangsan"
    7. 127.0.0.1:6379> smembers set:info
    8. 1) "wangwu"
    9. 2) "lisi"
    10. 127.0.0.1:6379>
  • sinter 交集运算

    sinter key [key…]

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

    sinterstote newKey key [key…]

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

    sunion key [keys]

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

    sunionstore newkey key [key…]

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

    sdiff key [key…]

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

    sdiffstore newkey key [key…]

    1. 127.0.0.1:6379> sdiffstore set:05 set:01 set:02
    2. (integer) 1
    3. 127.0.0.1:6379> smembers set:05
    4. 1) "aa"
    5. 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 …]

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

    zrem key member [member…]

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

    zscore key member

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

    zincrby key increment menber

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

    zcard key

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

    zrange key start stop

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

    zrevrange key start stop

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

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

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

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

    1. 127.0.0.1:6379> zinterstore zset:04 2 zset:01 zset:02
    2. (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

发表评论

表情:
评论列表 (有 0 条评论,288人围观)

还没有评论,来说两句吧...

相关阅读