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

连接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订阅了CSDN 和 搞笑漫画
127.0.0.1:6379> lpush userid001 1 # 当CSDN发布了一条文章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. 热搜排名
    在这里插入图片描述
### 回答1: Redis支持五种数据结构类型:字符串(string)、列表(list)、哈希(hash)、集合(sets)、有序集合(sorted sets)。它们可以用于实现缓存、消息队列、计数器、在线聊天室、投票系统、排行榜等应用场景。 ### 回答2: Redis支持多种数据结构类型,常用的有字符串、哈希、列表、集合和有序集合。 1. 字符串(strings):最基本的数据结构类型,可以存储字符串、整数或浮点数等。常用场景包括缓存、计数器和分布式锁等。 2. 哈希(hashes):类似于一个关联数组,可以存储多个字段和值的映射关系。适用于存储对象的各个属性,例如用户信息、商品详情等。 3. 列表(lists):支持在头部或尾部添加或删除元素,保持了元素的插入顺序。常用于消息队列、发布订阅系统和任务队列等场景。 4. 集合(sets):无序且唯一的元素集合。适用于需要对元素进行去重或集合操作的场景,例如标签云、社交关系等。 5. 有序集合(sorted sets):元素集合,每个元素都关联了一个分数,用于排序和获取范围内的元素。常见应用包括排行榜、热门文章等。 这些数据结构类型提供了丰富的功能和灵活性,可以根据不同的场景选择适合的数据结构。Redis 的快速读写性能和丰富的数据类型使得它成为了很多应用场景的首选,包括缓存、计数器、消息队列、排行榜、实时数据分析等。 ### 回答3: Redis是一款开源的、高性能的非关系型内存数据库,支持多种数据结构类型。常用的Redis数据结构类型有字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set)。 字符串类型是Redis最基本的数据结构类型,可以存储字符串和整数。它常用于缓存、计数器、共享会话等场景。 哈希类型可以存储多个字段和值的映射关系,类似于关联数组或字典。它适用于存储用户信息、商品信息等结构化的数据。 列表类型是有序的字符串列表,可以在列表的两端进行插入、删除和查找操作。它适合做消息队列、最新消息排行等场景。 集合类型是无序的字符串集合,可以对集合进行交集、并集和差集等操作,也支持添加、删除和查找元素。常用的场景包括社交关系、标签系统等。 有序集合类型是在集合类型的基础上,为每个元素关联一个分数,可以根据分数进行元素排序。它适用于排行榜、按照分数范围查找等场景。 除了以上几种数据结构类型,Redis还提供了位图、地理位置等特殊类型,可以应用于统计用户在线时长、地理位置检索等特定需求。 总而言之,Redis提供了多种数据结构类型,每种类型都有其独特的使用场景。根据具体的业务需求,选择适合的数据结构类型可以提升数据处理效率和灵活性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值