Redis常用的数据结构及使用场景

Redis** 常⻅数据结构以及使⽤场景
1 string
  1. **介绍:**最简单的类型,就是普通的set和get,做简单的kv缓存

  2. 常⽤命令:set,get,strlen,exists,dect,incr,setex 等等。

  3. **应⽤场景:**⼀般常⽤在需要计数的场景,⽐如⽤户的访问次数、热点⽂章的点赞转发数量等。

set key1 haha			#设置key
get key1					#获取key
exists key1 			#是否存在
strlen key1 			#获取长度
del key1					#删除key
2 list

image-20211231103812957

  1. 介绍: list 即是 链表。链表是⼀种⾮常常⻅的数据结构,特点是易于数据元素的插⼊和删除并且且可以灵活调整链表⻓度,但是链表的随机访问困难。Redis 的 list 的实现为⼀个 双向链表,即可以⽀持反向查找和遍历,更⽅便操作,不过带来了部分额外的内存开销。

  2. 常用命令: rpush,lpop,lpush,rpop,lrangellen 等。

  3. 使用场景: 可以通过 rpush/lpop 实现队列等

lrange mylist 0 -1 					# 0开始位置,-1结束  -1则表示查看所有
len mylist 									#查询list的元素个数
lindex mylist 1 						#获取list中指定位置的元素
lpush mylist 1  						#添加一个或多个元素值list的头部
rpush mylist 1  						#添加一个或多个元素值list的尾部
lpop mylist 								#从list中删除并返回第一个元素
rpop mylist 								#从list中删除并返回最后一个元素
3 hash
  1. 介绍: hash 类似于 JDK1.8 前的 HashMap,内部实现也差不多(数组 + 链表)。不过,Redis 的 hash 做了更多优化。另外,hash 是⼀个 string 类型的 field 和 value 的映射表,特别适合⽤于存储对象,后续操作的时候,你可以直接仅仅修改这个对象中的某个字段的值。 ⽐如我们可以 hash 数据结构来存储⽤户信息,商品信息等等。

  2. 常⽤命令:hset,hmset,hexists,hget,hgetall,hkeys,hvals 等。

  3. 应⽤场景: 系统中对象数据的存储。

hset sutdent name zhangsan			
hset student age 20
hset student id 1
hget student name
4 Set
  1. 介绍: set 类似于 Java 中的 HashSet 。Redis 中的 set 类型是⼀种⽆序集合,集合中的元素没有先后顺序。当你需要存储⼀个列表数据,⼜不希望出现重复数据时,set 是⼀个很好的选择,并且 set 提供了判断某个成员是否在⼀个 set 集合内的重要接⼝,这个也是 list 所不能提供的。可以基于 set 轻易实现交集、并集、差集的操作。

  2. 常用命令: sadd,spop,smembers,sismember,scard,sinterstore,sunion

  3. 应⽤场景: 需要存放的数据不能重复以及需要获取多个数据源交集和并集等场景

sadd mySet 1					# 添加元素

smembers mySet				# 查看全部元素

sismember mySet 3			# 判断是否包含某

srem mySet 1					# 删除某个/些元素

scard mySet						# 查看元素个数

spop mySet						# 随机删除一个元素

#-------操作多个set-------
# 将一个set的元素移动到另外一个set
smove yourSet mySet 2

# 求两set的交集
sinter yourSet mySet

# 求两set的并集
sunion yourSet mySet

# 求在yourSet中而不在mySet中的元素
sdiff yourSet mySet
5 Sorted Sets
  1. 介绍: 和 set 相⽐,sorted set 增加了⼀个权重参数 score,使得集合中的元素能够按 score进⾏有序排列,还可以通过 score 的范围来获取元素的列表。有点像是 Java 中 HashMap和 TreeSet 的结合体。

  2. 常⽤命令: zadd,zcard,zscore,zrange,zrevrange,zrem 等。

  3. 应⽤场景: 需要对数据根据某个权重进⾏排序的场景。⽐如在直播系统中,实时排⾏信息包含直播间在线⽤户列表,各种礼物排⾏榜,弹幕消息(可以理解为按消息维度的消息排⾏榜)等信息。

zadd board 85 zhangsan
zadd board 72 lisi
zadd board 96 wangwu
zadd board 63 zhaoliu

# 获取排名前三的用户(默认是升序,所以需要 rev 改为降序)
zrevrange board 0 3

# 获取某用户的排名
zrank board zhaoliu
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值