redis使用案例

1.计数器 string
单线程,避免并发问题,保证不会出错,毫秒级性能
命令:INCRBY incrby

2.队列 list 简单消息队列、用户第几个访问、新闻列表排序
因为redis把数据添加到队列是返回添加元素在队列的第几位,因此能够作判断用户是第几个访问这种业务
新闻列表页面最新的新闻列表,redis的 LPUSH命令构建List

3.在线状态、签到(大数据处理)
几亿用户系统的签到,去重登陆次数统计,用户是否在线状态
setbit、getbit、bitcount命令

原理是:
redis内构建一个足够长的数组,每一个数组元素只能是0和1两个值
数组的下标index用来表示咱们上面例子里面的用户id

4.hash实现幂等性请求
(hash实现幂等性请求)验证前端的重复请求,经过redis进行过滤:每次请求将request ip、参数、接口等hash做为key存储redis,设置多长时间有效期,而后下次请求过来的时候先在redis中检索有没有这个key,进而验证是否是必定时间内过来的重复提交

5.秒杀系统(防止超卖),单线程特征,自增,无并发问题 string

6.全局增量ID生成 生成全局惟一商品序列号、插入数据重复问题

7.排行榜 zrevrank 查看前n名 ZRANGE 查看全部排名 O(log(N))

谁得分高谁排名往上。命令:ZADD(有序集)

给Alice投票 redis> zincrby vote_activity 1 Alice "1"

给Bob投票 redis> zincrby vote_activity 1 Bob "1"

给Alice投票 redis> zincrby vote_activity 1 Alice "2"

查看Alice投票数 redis> zscore vote_activity Alice ----"2"

获取Alice排名(从高到低,zero-based ) redis> zrevrank vote_activity Alice (integer) 0

获取前10名(从高到低) redis> zrevrange vote_activity 0 9 1) "Alice" 2) "Bob"

获取前10名及对应的分数(从高到低) redis> zrevrange vote_activity 0 9 withscores "Alice" "2" "Bob" "1"

获取总参与选手数 redis> zcard vote_activity (integer) 2

score相同,排序逻辑是按照key的字母序排序,同分数状况下按时间排序,key加上时间戳前缀

经过ZRANK能够快速获得用户的排名

经过ZRANGE能够快速获得TOP N的用户列表,它们的复杂度都是O(log(N)),前端

更多技术咨询可关注:gzitcastredis

相关文章
相关标签/搜索