redis几种数据类型以及使用场景

本文深入讲解Redis中的五种主要数据类型:String、Hash、List、Set及ZSet的特性和应用场景,包括计数、购物车管理、文章列表、粉丝抽奖等实际案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

连接Redis

$ redis-cli -h host -p port -a password

[root@CentOS src]# ./redis-cli -p 6383

Redis的数据类型

String 字符串

String是最基础的,一个key对应的一个value。

127.0.0.1:6379> set k1 hello
OK
127.0.0.1:6379> get k1
"hello"
127.0.0.1:6379>
String的应用场所
有一种需求:
赞一个、踩一下(计数)。

incr
decr

127.0.0.1:6379> incr sku0001
(integer) 1
127.0.0.1:6379> incr sku0001
(integer) 2
127.0.0.1:6379> incr sku0001
(integer) 3
127.0.0.1:6379> get sku0001
"3"
127.0.0.1:6379> 

在这里插入图片描述

Hash 哈希

Hash是键值对的集合,相当于java中的Map<String,Map<Object, Object>>

127.0.0.1:6379> hmset hash_value key1 hello key2 world
OK
127.0.0.1:6379> hget hash_value key1
"hello"
127.0.0.1:6379>
Hash的应用场所
简单版本的购物车
127.0.0.1:6379> hset shopcar:user1 sku001 1 # 添加商品sku001到购物车里 数量1
(integer) 1
127.0.0.1:6379> hset shopcar:user1 sku002 1 # 添加商品sku002到购物车里 数量1
(integer) 1
127.0.0.1:6379> hincrby shopcar:user1 sku002 1 # 增加商品sku001的数量
(integer) 2
127.0.0.1:6379>  hlen shopcar:user1 # 获取用户商品数量
(integer) 2
127.0.0.1:6379> hgetall shopcar:user1 # 获取所有商品
1) "sku001"
2) "1"
3) "sku002"
4) "2"

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

List 列表

List是简单的字符串列表,按照插入顺序排序

127.0.0.1:6379> lpush list_value a
(integer) 1
127.0.0.1:6379> lpush list_value b
(integer) 2
127.0.0.1:6379> lpush list_value c
(integer) 3
127.0.0.1:6379> lrange list_value 0 5
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> rpush rlist a1 a2 a3 a1 a5
(integer) 5
127.0.0.1:6379> lrange rlist 0 -1
1) "a1"
2) "a2"
3) "a3"
4) "a1"
5) "a5"
127.0.0.1:6379> 
应用场景
订阅公众号,当发布一条文章,就往我的订阅里的文章列表加一条文章的id。
# 用户userid001订阅了优快云 和 搞笑漫画
127.0.0.1:6379> lpush userid001 1 # 当优快云发布了一条文章1
(integer) 1
127.0.0.1:6379> lpush userid001 2 # 当搞笑漫画发布了一条文章2
(integer) 2
127.0.0.1:6379> lrange userid001 0 -1 # 获取我的文章列表
1) "2"
2) "1"
127.0.0.1:6379> 

Set 集合

Set里的元素是唯一的。以下加了两次banana被忽略。

127.0.0.1:6379> sadd set_value apple
(integer) 1
127.0.0.1:6379> sadd set_value banana
(integer) 1
127.0.0.1:6379> sadd set_value banana
(integer) 0
127.0.0.1:6379> smembers set_value
1) "apple"
2) "banana"
127.0.0.1:6379> scard set_value
(integer) 2
127.0.0.1:6379> spop set_value
"banana"
127.0.0.1:6379> srandmember set_value 2 # 随即抽取【2】个
1) "apple"
2) "banana"
# 集合运算
127.0.0.1:6379> sadd set1 1 3 5 7 9
(integer) 5
127.0.0.1:6379> sadd set2 2 4 6 8 9
(integer) 5
# set1-set2=set1独有的(差集)
127.0.0.1:6379> sdiff set1 set2
1) "1"
2) "3"
3) "5"
4) "7"
# set2-set1=set2独有的
127.0.0.1:6379> sdiff set2 set1
1) "2"
2) "4"
3) "6"
4) "8"
# 交集 既在set1 又在set2的值
127.0.0.1:6379> sinter set1 set2
1) "9"
# union 合在一起
127.0.0.1:6379> sunion set1 set2
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
8) "8"
9) "9"
应用场景
  1. 小程序给粉丝抽奖
127.0.0.1:6379> sadd choujiang tom bob alice jim susan 
(integer) 5
# pop出中奖的用户的名称
127.0.0.1:6379> spop choujiang # 一等奖弹出一个
"bob"
127.0.0.1:6379> spop choujiang 2 # 二等奖弹出2个
1) "jim"
2) "alice"
127.0.0.1:6379> scard choujiang # 还剩下两个没中奖
(integer) 2

在这里插入图片描述在这里插入图片描述
2. 微信朋友圈点赞
在这里插入图片描述
在这里插入图片描述
步骤:

  • 发布了一条朋友圈,id为msg001
  • 用户A,B,C,D来点赞
  • 用户C取消了点赞
  • 用户B看到这条消息是已点赞状态 还是未点赞的状态
127.0.0.1:6379> sadd wechat:good A B C D # 添加ABCD
(integer) 4
127.0.0.1:6379> srem wechat:good C # 移除C的点赞
(integer) 1
127.0.0.1:6379> smembers wechat:good # 还剩下的点赞的用户(头像显示)
1) "D"
2) "B"
3) "A"
127.0.0.1:6379> scard wechat:good # 红色提醒的数字图标
(integer) 3
127.0.0.1:6379> sismember wechat:good B # B用户在不在点赞的列表里
(integer) 1
  1. 微博社交
    在这里插入图片描述
127.0.0.1:6379> sadd sis:weibo li wang zhao zheng xiao # 妹妹微博关注的
(integer) 5
127.0.0.1:6379> sadd my:weibo wei zhao wang qian sun # 我微博关注的
(integer) 5
127.0.0.1:6379> sinter sis:weibo my:weibo #共同关注的
1) "wang"
2) "zhao"
127.0.0.1:6379> sdiff sis:weibo my:weibo #我关注的人关注他们(我可能想要关注的)
1) "li"
2) "zheng"
3) "xiao"
#我关注的人也关注妹妹的
127.0.0.1:6379> smembers my:weibo # 循环遍历我关注的人的关注列表,检查我关注的人的关注列表里有没有妹妹sis
1) "zhao"
2) "qian"
3) "wei"
4) "wang"
5) "sun"
127.0.0.1:6379> sismember sis:weibo zhao # zhao的微博有木有关注sis?
(integer) 0
  1. QQ推荐可能认识的人
    sdiff(我的朋友,他可能认识 and 他的好友,我可能认识) 和 sinter(共同好友)

ZSet 集合

带排序的功能

应用场景
  1. 商品销售排名
    在这里插入图片描述
127.0.0.1:6379> zadd product:sell 9 1001
(integer) 1
127.0.0.1:6379> zadd product:sell 15 1002
(integer) 1
127.0.0.1:6379> zincrby product:sell 2 1001
"11"
127.0.0.1:6379> zrange product:sell 0 9
1) "1001"
2) "1002"
127.0.0.1:6379> zrange product:sell 0 9 withscores
1) "1001"
2) "11"
3) "1002"
4) "15"
  1. 热搜排名
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值