项目中巧用redis有序集合

redis有序集合
  • 什么是redis有序集合?
    • Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
    • 不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
    • 有序集合的成员是唯一的,但分数(score)却可以重复。
    • 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
示例
redis 127.0.0.1:6379> ZADD w3ckey 1 redis
(integer) 1
redis 127.0.0.1:6379> ZADD w3ckey 2 mongodb
(integer) 1
redis 127.0.0.1:6379> ZADD w3ckey 3 mysql
(integer) 1
redis 127.0.0.1:6379> ZADD w3ckey 3 mysql
(integer) 0
redis 127.0.0.1:6379> ZADD w3ckey 4 mysql
(integer) 0
redis 127.0.0.1:6379> ZRANGE w3ckey 0 10 WITHSCORES
 
1) "redis"
2) "1"
3) "mongodb"
4) "2"
5) "mysql"
6) "4"
案例

有一批userId 需要异步脚本去跑数据,但是每个uid执行的时间是未来的某个时间,那么uid+time就是绑定在一起了,想性能最大化处理这个问题?不想每次获取全量数据在进行判断?

解决1:通过mysql,将数据与时间落表,再通过sql根据时间取出相对应的数据,数据量大的话,可定时归档或者清理老数据。
问题:多了张表,增加了维护成本
解决2:uid+time拼接成一个key,塞入redis,每次定时任务全量取出来,依次解开判断
问题:消耗性能
解决3:将uid+time存入redis有序集合,脚本获取时可以根据时间获取到对应的数据

一起来学习Golang吧

golang

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值