Redis 的 String,hash,list,set,zet常用命令 及其实际业务场景

redis基础命令

select切换数据库:一共16个库(索引从0开始)
在这里插入图片描述
dbsize查看当前数据库的key的数量
在这里插入图片描述
flushdb:清空当前库
Flushall;通杀全部库

key 相关的命令

  1. keys *:查看当前数据库所有的key
    命令: keys *
    在这里插入图片描述

  2. exists key的名字:判断某个key是否存在
    命令:exists key的名字 (存在:返回1,不存在:返回0)
    在这里插入图片描述

  3. move key db:移动key到指定的库(相当于剪切,一个库移动到另一个库)
    命令:move key db
    例如:把0号库的 key为a1 的数据移动到1号库
    在这里插入图片描述

  4. expire key 秒钟 和 ttl key:设置过期时间,和查看过期时间
    命令:ttl key 查看还有多少秒过期,-1表示永不过期,-2表示已过期
    命令:expire key 数字 为给定的key设置过期时间
    例:给a1 设置过期时间为10秒,并查看还有多长时间过
    在这里插入图片描述

  5. type key:查看你的key是什么类型
    命令: type key
    在这里插入图片描述

Redis 数据类型及其相关命令

Redis字符串(String)

redis 的string类型是单值单value

  1. set/get/del/append/strlen
    命令:

    1. set key value : 往redis存值
    2. get key:取出对应的key的值
    3. del key:删除对应的key和值
    4. append key value: 往key 的值中追加数据(相当与字符串拼接)
    5. strlen key:对应字符串的长度

    在这里插入图片描述

  2. Incr/decr/incrby/decrby (一定要是数字才能进行加减)
    命令:

    1. Incr key:每次增加1
    2. decr key: 每次减1
    3. incrby key num:key对应的数按num数量递增
    4. decrby key num:每次按num数量的递减

    在这里插入图片描述

  3. getrange/setrange

    1. getrange key startIndex endIndex:获取指定区间的值包含开始和结束索引(getrange key 0 -1:表示返回所有)
    2. setrange key startIndex 值 :从指定位置设置值(覆盖了原来的值)

    在这里插入图片描述

  4. setex(set with expire)/setnx(set if not exist)

    1. setex key 过期时间 值:设置值并设置过期时间
    2. setnx key 值:如果不存在才插入值
      在这里插入图片描述
  5. mset/mget/msetnx

    1. mset key1 v1 key2 v2 key3 v3:一次可以插入多个值
    2. mget key1 key2 key3:一次取多个值
    3. msetnx key1 v1 key2 v2 key3 v3: 如果插入的key不存在才插入,只要有一个存在不插入
      在这里插入图片描述
  6. getset(先get再set)

    getset key value:先取出先前的值,然后在原来的值覆盖
    在这里插入图片描述

String 业务场景

Redis String 类型的业务场景可太多了,比如电商网站中,用来存储热点商品信息,用户信息,等都可以用String类型来存储,如:

key:user:4  值:{"@class":"com.fyj.entity.Student","id":4,"name":"方亚军","age":22}
代表用户id为4 学生信息存在redis

在这里插入图片描述

Redis列表(List)

介绍:
redis 的string类型是单key多value (value 可以重复)
底层是一个双向链表,可以往左右插入值
存储类型:
key ----> 双向链表

命令:

  1. lpush/rpush/lrange (链表头表示左,链表尾表示右)
    1. lpush key v1 v2 v3... : 往链表的左边(头)插入多个值
    2. rpush key v1 v2 v3...:往链表的右边(尾)插入多个值
    3. lrange key startIndex endIndex:取出链表对应范围的值,从头开始取(注意:如果endIndex=-1的话,表示取到链表的最后,)
      在这里插入图片描述
  2. lpop/rpop

    lpop lkey:从链表头取出链表元素(取一个少一个)
    rpop lkey:从链表尾部取出链表元素(取一个少一个)
    在这里插入图片描述

  3. lindex,按照索引下标获得元素

    lindex lkey index:取出对应下标的值
    在这里插入图片描述

  4. llen 获取存储元素的个数

    llen lkey:对应链表的值的个数
    在这里插入图片描述

  5. lrem lkey 删N个value

    lrem lkey num(要删除的数量) value:删除链表中num数量的value(当有多个相同的value时,我们可以删除多个vlaue)
    如:lrem list02 2 3:表示从list02链表中删除2个数量的3
    在这里插入图片描述

  6. ltrim key 开始index 结束index,截取指定范围的值后再赋值给key

    ltrim lkey startInde endIndex:从链表中截取指定范围的值,然后把该值有重新赋值给该链表(原来链表的值将会删除)
    在这里插入图片描述

  7. rpoplpush 源列表 目的列表

rpoplpush 源列表 目的列表:从源链表的尾部位置取出一个元素,然后把该元素从目标链表的头部插入,
在这里插入图片描述

  1. lset key index value

    lset key index value:修改链表对应索引的值
    在这里插入图片描述

  2. linsert key before/after 值1 值2

    linsert lkey before/after v1 v2:在v1值的 前面/后面 插入值v2
    在这里插入图片描述

List业务场景

list类型的业务场景也有很多,我们要理解redis中 list类型特点,list可以存储多个数据(可以重复),那么如某个商品评论信息我们是不是可以放进list中呢,还如某个用户发表的文章也可以放进list中。还有类似微信公众号订阅消息也可以用list集合:

  1. 大V作者李永乐老师和CSDN发布了文章分别是 11 和 22
  2. 我关注了他们两个,只要他们发布了新文章,就会安装进我的List
    lpush likearticle:user:id 11 22
  3. 查看我的号订阅的全部文章,类似分页,下面0~10就是一次显示10条
    lrange likearticle:user:id 0 9
    在这里插入图片描述

Redis集合(Set)

介绍:
set类型是单key 多value (value 不许重复)

命令:

  1. sadd/smembers/sismember

    1. sadd skey v1 v2 v3:往set集合里面添加数据,如果有重复值,只能插入一个
    2. smembers skey:取出该集合的所有值
    3. sismember skey value:判断value在该set中是否存在,0:不存在;1:存在
      在这里插入图片描述
  2. scard,获取集合里面的元素个数

    scard skey: 获取集合里面的元素个数
    在这里插入图片描述

  3. srem key value 删除集合中元素

    srem key value:删除对应集合指定的值
    在这里插入图片描述

  4. srandmember key 某个整数(随机出几个数)

    srandmember skey num:从set集合中随机取出num数量的值
    在这里插入图片描述

  5. spop key 随机出栈

    spop skey:随机从集合中弹出一个元素
    在这里插入图片描述

  6. smove key1 key2 在key1里某个值 作用是将key1里的某个值赋给key2

    smove key1 key2 在key1里某个值 :
    在这里插入图片描述

  7. 数学集合类(差集:sdiff, 交集:sinter, 并集:sunion)

    sdiff skey01 skey02:求差集(即在skey01除去skey01和skey02的交集)
    sinter skey02 skey02:交集,skey02和skey02都有的值
    sunion skey01 skey02:并集,skey02和skey02值的合并
    在这里插入图片描述

set 业务场景

set 和 list 类似,区别就是 list 可以存放重复的数据,而set存放的数据不能重复。根据set这种特性,一个典型的业务场景就是抽奖,还有许多场景如微信朋友圈点赞等。

活动抽奖
在这里插入图片描述

  1. 点击立即参与按钮,使用redis命令 sadd key 将用户添加到该奖品对应的用户集合中
  2. 显示已经有多少人参与了,上图23208人参加 可以使用命令SCARD key统计出多少人参与
  3. 抽奖(从set中任意选取N个中奖人)
    命令: SRANDMEMBER key 2 随机抽奖2个人,元素不删除(中奖了还可以继续参加)
    命令: SPOP key 3 随机抽奖3个人元素会删除(中奖了就不能参加了)

微信朋友圈点赞

  1. 新增点赞 ,使用命令sadd 往该朋友圈文章对应的点赞集合中添加元素(用户id)
  2. 取消点赞,使用命令srem 删除该朋友圈文章对应集合中元素(用户id)
  3. 展现所有点赞过的用户,命令SMEMBERS 取出集合中所有元素

微博好友关注社交关系(sdiff,sinter,sunion应用)
在这里插入图片描述
在这里插入图片描述
共同关注:我去到局座张召忠的微博,马上获得我和局座共同关注的人
我关注的人也关注他(大家爱好相同):我关注了华为余承东,余承东也关注了局座召忠,我和余总有共同的爱好

Redis哈希(Hash)

介绍:
Redis哈希(Hash):单key 单value,但是value是一个k,v键值对

命令:

  1. hset/hget/hmset/hmget/hgetall/hdel(重要)

    1. hset hkey k v:插入一个键值对(k,v)
    2. hget hkey k1:从hkey中的键值对中取出key 是k1 的值
    3. hmset hkey k1 v1 k2 v2...:一次插入多个键值对
    4. hmget hkey k1 k2 k3...:一次取出多个对应key的值
    5. hgetall hkey :取出hkey 对应的所有的k,v键值对
    6. hdel hkey k1:删除 k1键值对

    在这里插入图片描述

  2. hlen

    hlen hkey :求出hkey对应的k,v键值对的个数
    在这里插入图片描述

  3. hexists

    hexists hkey k:在hkey的所有k,v键值对中是否存在键是k的键值对
    在这里插入图片描述

  4. hkeys/hvals

    hkeys hkey :获取hkey中所有键值对的 键
    hvals hkey:获取hkey中所有键值对的 值
    在这里插入图片描述

  5. hincrby/hincrbyfloat

    1. hincrby hkey k num:给 k 对应的值 自增 num的数 (v = v + num)
    2. hincrbyfloat hkey k float: 给 k 对应的值 自增 float的小数数 (v = v + float)
      在这里插入图片描述
  6. hsetnx

    hsetnx hkey k v:往hkey 里面添加k,v键值对,当hkey 没有重复k就插入成功,否则就插入失败
    在这里插入图片描述

hash 业务场景

hash有个典型业务场景,也是我以前实践用过,购物车可以使用redis的hash类型实现

新增商品 → hset shopcar:uid1024 334488 1
新增商品 → hset shopcar:uid1024 334477 1
增加商品数量 → hincrby shopcar:uid1024 334477 1
商品总数 → hlen shopcar:uid1024
全部选择 → hgetall shopcar:uid1024

在这里插入图片描述

Redis有序集合Zset(sorted set)

介绍:
Zset 在set基础上,加一个score值。
之前set是k1 v1 v2 v3,
现在zset是k1 score1 v1 score2 v2

命令:

  1. zadd/zrange

    1. zadd zkey score1 v1 score2 v2 score3 v3:往set里面放数据,在每个数据的前面都有一个对应的 score(排名值)
    2. zrange zkey startIndex endIndex:取出指定范围set里面的值,不带score
    3. zrange zkey startIndex endIndex withscore:取出指定范围set里面的值,带score
      在这里插入图片描述
  2. zrangebyscore key [(]开始score [(]结束score

    1. zrangebyscore zkey [(]开始score [(]结束score :表从对应的zkey集合中取出 指定范围score 的值 (([(]表示可选值 , ( :表示不包含))
    2. zrangebyscore zkey 开始score 结束score limit num1 num2:表从对应的zkey集合中取出 指定范围score 的值,从开始下标步num1 开始,取出num2数量的值 (相当于分页)
      在这里插入图片描述
      在这里插入图片描述
  3. zrem

    zrem zkey v:删除zkey对应的value值,包括score
    在这里插入图片描述

  4. zcard,zcount ,zrank ,zscore

    1. zcard zkey:获取zkey对应集合的size大小
    2. zcount zkey startScore endScore:统计zkey集合对应scoreq区间的size个数
    3. zrank zkey v:获取v对应的下标
    4. zscore zkey v:获取v对应的score
      在这里插入图片描述
  5. zrevrank

    zrevrank zkey v:逆序获得v下标值 (最尾部开始,最尾部的下标为0)
    在这里插入图片描述

  6. zrevrange (倒序遍历)

    zrevrange zkey startIndex endIndex:倒序遍历,与zrange相反
    在这里插入图片描述

  7. zrevrangebyscore zkey 结束score 开始score

    zrevrangebyscore zkey 结束score 开始score:从集合尾部的score开始往前面score 结束,返回对应的值

    在这里插入图片描述

zset 业务场景

zset 和 set 的典型区别就是 zset 每个元素都有对应的分数,我们可以根据此分数可以定义许多业务场景,我们可以把分数看成是商品的销量,或者是文章的阅读量,或者xxx的点击量等等,然后就可以根据这些分数来进行排序展示。

场景一:根据商品销量对商品进行排序显示

思路:定义商品销售排行榜(sorted set集合),key为goods:sellsort,分数为商品销售数量。

场景二:抖音热搜

我们可以把搜索量看成是zset看成分数,对应值存热搜文章或者视频看成是值
在这里插入图片描述

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值