一文搞定Redis五大数据类型及使用场景( 二 )
文章插图
集合集合类型也可以保存多个字符串元素 , 与列表不同的是 , 集合中不允许有重复元素并且集合中的元素是无序的 。 一个集合最多可以存储2^32-1个元素 。
4.1 内部编码集合类型的内部编码有两种:
- intset(整数集合):当集合中的元素都是整数且元素个数小于set-max-intset-entries配置(默认512个)时 , redis会选用intset来作为集合的内部实现 , 从而减少内存的使用 。
- hashtable(哈希表):当intset不能满足要求时 , 会使用hashtable 。
- 给用户打标签
sadd user:1:tags tag1 tag2- 给标签添加用户
sadd tag1:users user:1sadd tag2:users user:1使用交集(sinter)求两个user的共同标签sinter user:1:tags user:2:tags4.2.2 抽奖功能集合有两个命令支持获取随机数 , 分别是:- 随机获取count个元素 , 集合元素个数不变
srandmember key [count]- 随机弹出count个元素 , 元素从集合弹出 , 集合元素个数改变
spop key [count]用户点击抽奖按钮 , 参数抽奖 , 将用户编号放入集合 , 然后抽奖 , 分别抽一等奖、二等奖 , 如果已经抽中一等奖的用户不能参数抽二等奖则使用spop , 反之使用srandmember 。
文章插图有序集合有序集合和集合一样 , 不能有重复元素 。 但是可以排序 , 它给每个元素设置一个score作为排序的依据 。 最多可以存储2^32-1个元素 。
5.1 内部编码有序集合类型的内部编码有两种:
- ziplist(压缩列表):当有序集合的元素个数小于list-max-ziplist-entries配置(默认128个)同时所有值都小于list-max-ziplist-value配置(默认64字节)时使用 。 ziplist使用更加紧凑的结构实现多个元素的连续存储 , 更加节省内存 。
- skiplist(跳跃表):当不满足ziplist的要求时 , 会使用skiplist 。
用户发布一篇文章 , 初始点赞数为0 , 即score为0
zadd user:article 0 a有人给文章a点赞 , 递增1zincrby user:article 1 azrevrangebyscore user:article 0 2zrangebyscore user:article 0 25.2.2 延迟消息队列下单系统 , 下单后需要在15分钟内进行支付 , 如果15分钟未支付则自动取消订单 。 将下单后的十五分钟后时间作为score , 订单作为value存入redis , 消费者轮询去消费 , 如果消费的大于等于这笔记录的score , 则将这笔记录移除队列 , 取消订单 。
文章插图总结在开发中 , 字符串类型是用的最多的数据类型 , 导致我们忽视了redis的其他四种数据类型 , 在具体场景下选择具体的数据类型对提升redis性能有非常大的帮助 。 redis虽然支持消息队列的实现 , 但是并不支持ack 。 所以redis实现的消息队列不能保证消息的可靠性 , 除非自己实现消息确认机制 , 不过这非常麻烦 , 所以如果是重要的消息还是推荐使用专门的消息队列去做 。
文章插图
文章插图
文章插图【一文搞定Redis五大数据类型及使用场景】点分享
文章插图
文章插图- 当初|这是我的第一部华为手机,当初花6799元买的,现在“一文不值”?
- sd|sd卡修复工具有哪些?两个办法就可以搞定了
- 打印机的共享设置方法,简单6部搞定!
- 3天时间,我是如何解决redis bigkey 删除问题的?
- 零基础小白Python入门必看:通俗易懂,搞定深浅拷贝
- 来源|20秒搞定 换电池比加油还快!新能源汽车换电站现身昆明街头
- Django实战016:django中使用redis详解
- 你不知道的Redis:入门?数据结构?常用指令?
- Python操作Redis大全
- 为什么 Redis 单线程能支撑高并发?
