Redis--Hash&List介绍和使用场景

Hash数据结构

  • Hash类型是String类型的field和value映射表,或者说是一个String集合,它特别适合存储对象,相比较而言,
    将一个对象类型存储在Hash类型里要比存储在String类型类,占用更小的内存空间,并方便存取整个对象。
    在这里插入图片描述
    在Redis中,哈希类型是指键值本身又是一个键值对结构,形如:value={{field1,value1},{field2,value2},{fieldN,valueN}}
    Redis键值对和哈希类型二者的关系,如下图所示:
    在这里插入图片描述

Hash结构

在这里插入图片描述

Hash应用场景

1. 对象缓存

  • hash类型的(key, field, value)的结构与对象的(对象id, 属性, 值)的结构相 似,也可以用来存储对象。
    在介绍string类型的应用场景时有所介绍,string + json也是存储对象的一种方式,那么存储对象时,
    到底用string +json还是用hash呢?两种存储方式的对比如下表所示。
    在这里插入图片描述
  • 当对象的某个属性需要频繁修改时,不适合用string+json,因为它不够灵活,
    每次修改都需要重新将整个对象序列化并赋值,如果使用hash类型,则可以针对某个属性单独修改,没有序列化,
    也不需要修改整个对象。比如,商品的价格、销量、关注数、评价数等可能经常发生变化的属性,
    就适合存储在hash类型里。
    在这里插入图片描述

2. 购物车

  • 以用户id为key,商品id为field,商品数量为value,恰好构成了购物车的3个要素,如下图所示。
    在这里插入图片描述

Hash结构的优缺点

在这里插入图片描述

List数据结构

  • list类型是用来存储多个有序的字符串的,列表当中的每一个字符看做一个元素,一个列表当中可以存储有一个或者多个元素,redis的list支持存储2^32次方-1个元素。redis可以从列表的两端进行插入(pubsh)和弹出(pop)元素,支持读取指定范围的元素集,或者读取指定下标的元素等操作。redis列表是一种比较灵活的链表数据结构,它可以充当队列或者的角色。
  • redis列表是链表型的数据结构,所以它的元素是有序的,而且列表内的元素是可以重复的。意味着它可以根据链表的下标获取指定的元素和某个范围内的元素集。
    在这里插入图片描述

List应用场景

  • 栈:LPUSH +LPOP -->FILO
    先进后出原则:LPUSH从队列左边进入d,c,b,a, LPOP从队列左边出来a,b,c,d
  • 队列: LPUSH+RPOP
    先进先出原则:LPUSH从队列左边进入d,c,b,a, RPOP从队列右边出d,c,b,a
  • 阻塞队列: LPUSH+BRPOP
    LPUSH+BRPOP是在LPUSH+RPOP的基础上多了阻塞和等待的功能,
    BRPOP实际上就是等于Blocking+RPOP,当队列中的数据为空时,
    会一直监听消息队列,直到获得消息
    在这里插入图片描述
  • 微博消息和微信公众号消息
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redis中,zset(有序集合)和hash(哈希)是两种不同的数据结构,它们有以下区别: 1. 数据结构: - zset:有序集合是一种有序的字符串集合,其中每个成员都与一个分数相关联。它使用分数来对成员进行排序,并且可以根据分数范围或成员来获取数据。 - hash:哈希是一个键值对集合,其中每个键都与一个值相关联。哈希表中的键值对是无序的。 2. 排序: - zset:zset中的成员是根据其关联的分数进行排序的。可以按照分数大小进行升序或降序排列,并且可以通过分数范围来获取成员。 - hash:哈希表中的键值对是无序的,没有排序概念。 3. 存储: - zset:有序集合使用跳跃表(skiplist)和散列表(hashtable)的组合来实现。跳跃表提供了快速的有序访问,而散列表用于存储成员和与之相关联的分数。 - hash:哈希表使用散列表来实现,通过哈希函数将键映射到散列表中的索引位置。 4. 功能: - zset:有序集合提供了一系列操作,如添加成员、删除成员、更新成员的分数、获取成员的排名和分数等。 - hash:哈希表提供了一系列操作,如设置键值对、获取键值对、删除键值对、获取所有键或值等。 5. 应用场景: - zset:有序集合常用于需要按照分数进行排名和排序的场景,如排行榜、积分系统等。 - hash:哈希表适用于存储和访问键值对的场景,如缓存、用户信息存储等。 总结来说,zset适合有序数据的存储和排序需求,而hash适合键值对的存储和快速访问需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值