数据结构论坛

首页 » 分类 » 常识 » redis的五种数据结果和应用场景
TUhjnbcbe - 2025/4/13 16:55:00
北京治疗白癜风多少钱一次 https://jbk.39.net/yiyuanzaixian/bjzkbdfyy/nxbdf/

Redis五种数据结构如下:

文章配图

1.String字符串类型

是redis中最基本的数据类型,一个key对应一个value。

String类型是二进制安全的,意思是redis的string可以包含任何数据。如数字,字符串,jpg图片或者序列化的对象。

2.Hash(哈希)

是一个Mapmap,指值本身又是一种键值对结构,如value={{field1,value1},......fieldN,valueN}}

3.链表(List)

List说白了就是链表(redis使用双端链表实现的List),是有序的,value可以重复,可以通过下标取出对应的value值,左右两边都能进行插入和删除数据。

4.Set集合

集合类型也是用来保存多个字符串的元素,但和列表不同的是集合中1.不允许有重复的元素,2.集合中的元素是无序的,不能通过索引下标获取元素,3.支持集合间的操作,可以取多个集合取交集、并集、差集。

5.zset有序集合

有序集合和集合有着必然的联系,保留了集合不能有重复成员的特性,区别是,有序集合中的元素是可以排序的,它给每个元素设置一个分数,作为排序的依据。

应用场景

String应用场景

文章配图文章配图

1.单值缓存

SetKeyValue

GetKey

2.对象缓存

1.Setuser:1value(json格式数据)

2.MSetuser:1:nameguajiause:1:balance

MGetuser1:nameuser:1:balance

3.分布式锁:

3.1分布式运用场景一

文章配图

如图标红的部分,如果是单体架构我们一般是这样来实现减库存操作的但是在高并发的互联网公司这样做,就会造成“超卖”的现象。所以就需要redis来实现分布式锁

如上图标记SETNX命令它只会存入一个不存在的键值对,如果不会改变原来的key所存入的值,返回结果为0

SETNXproduct:true//返回1代表获取锁成功返回0代表获取锁失败

---》执行业务操作

文章配图

DELproduct://执行完业务用它来释放锁

SETproduct:trueex10nx//防止程序意外终止而导致死锁

3.2分布式运用场景二

文章配图

INCR命令每次执行所存储的key的值数量加1(如果用数据库的话需要考虑并发和加锁)

文章配图

3.3分布式运用场景三

原理是把原有的tomcat存储用户信息转为redis把用户的信息序列化后存入redis。

3.4分布式运用场景四

INCRBYorderId//redis批量生成序列号提升性能

如项目使用分库分表,就可以使用这个,目的是让主键ID在都是唯一的,这个在实际场景非常重要。

使用INCRBYorderId(这个命令是一次生成个订单id供下次生成订单使用)

Hash应用场景

文章配图

大家仔细看Hsetkeyfieldvalue比string多出来了一个field

文章配图文章配图

Hash应用场景一

文章配图文章配图

如图先是刚加入购物车的商品使用hsetcart:,啥意思cart代表的购物车当然这个key你可以随意定但是意义要让所有人清楚,:这里代表的是用户id,后面的代表的是商品id。

第二步点击购物车的增加商品按钮可以使用hincrby命令对已有值进行增量操作

有人可能会问,如果减少加购数量?骚年你太年轻了可以把增量的值调为-1那每次就是减1

获取购物车商品总数hlencart:[这边把商品id去掉就行了前提是你所有的加购设置key和field的格式是一样的不然查出来的数量肯定不对]//它返回的是key下的所有field数量

涉及删除商品,使用删除的命令hdelcart:

获取加购商品的总数量使用hgetallcart://它返回的key下的所有键值,可以把所有的值加起来就是加购商品总数量

文章配图

hash的优点缺点

文章配图

hash的会分配槽位,集群中会导致数据过于集中,没办法做分片。

List应用场景

文章配图

仔细看命令前缀有L和R分别代表左和右。

常用的数据结构

文章配图

栈:LPUSH+LPOP=放进去的数据放在左边导致最后放进去的元素处于栈顶最先的元素是处于栈底使用LPOP取值是先从最左侧取值的符合先进后出的规则

队列:与上面相反取值时是使用RPOP是移除值是从最右侧开始的所有最后进入的会被取出符合队列的先进先出的规则

*BLOCKIngMQ(阻塞队列)*:=LPUSH +BRPOP[这个就是一个消息队列,消息队列中有个发送者和接受者]

BRPOP就是从key列表尾弹出一个元素,如果列表中没有元素,就会一直处于阻塞等待多少秒,后面又会循环的执行直到取到元素为止

运用的场景一

文章配图

如微博你

1
查看完整版本: redis的五种数据结果和应用场景