目录
一.案例一
1.百度自研语音识别服务,免费给企业开放使用,现对用户进行限速,限制每个用户每分钟最多发起10次调用
解决方案:
1.设计计数器,调用次数用于控制业务执行次数,以及用户id为key,使用次数为value
2.调用前获取次数,判断是否超过限定次数
不超过次数的情况下,每次调用计数+1
业务调用失败,计数-1
为计数器设置生命周期为指定周期,例如:1秒, 1分钟
如图所示:
案例如下:
实现1分钟之内的增长
解决方案改良:
取消最大值的判定,利用incr超过最大值抛出异常的方式替代每次都要判断是不是超过10
判断是否为nil
如果是,设置为MAX-预定次数
如果不是,计数+1
业务调用失败,计数-1
遇到异常即+操作超过上限,视为使用达到上限
超过ERR increment or decrement wouid overflow 捕获异常即可
利用最大值,做触发判断
tips16:redis应用于限时按次的服务结算控制
二.微信接受消息顺序
业务场景:
微信接收消息后,会默认将最近接收的消息置顶,当多个好友及关注的订阅号同时发送消息,该排序会不停的进行交替
,将重复会话设置置顶.一旦用户离线后,再次打开微信时,消息该按什么的顺序显示
解决方案:
1.依赖list的数据具有顺序的特征对消息进行管理,将list结构作为栈使用
2.对置顶与普通会话分别创建独立的list分别管理
3.当某个list中接收到用户消息后,将消息发送方的id从list一端加入list(此处设为左侧)
4.多个相同id发出的消息反复入栈会出现问题,在入栈之前无论是否具有当前id对应的消息,先删除该id
5.推送消息时先推送置顶会话list, 再推送普通会话list,推送完成的list清楚所有数据
6.消息的数量,也就是微信用户对话数量采用计数器的思想另行记录,伴随list操作同步更新
tips17:
redis应用于基于时间顺序的数据操作而不是关注具体时间
三.通用指令—key基本操作
1.key通用指令和数据库通用指令
key特征:
key是一个字符串,通过key获取redis中保存的数据
key应该设计哪些操作
1.对于key自身有效性的相关操作:例如删除,判定存在,获取类型等
2.对有效性控制相关操作:例如有效期设定,判定是否有效,有效状态的切换等
3.对于key快速查询操作,例如按指定策略查询key等
4.删除指定key del key
5.获取key是否存在 exists key
6.获取key的类型 type key
key扩展操作(时效性)
1.为key设置有效期
expire key seconds
pexpire key milliseconds 毫秒
expireat key seconds 时间戳
pexpireat key milliseconds timestamp 时间戳
获取key的有效时间
ttl key (time to live )
pttl key
切换key从时效性转换为永久性 persist key
2.key查询操作
key扩展操作(查询模式)
查询key keys pattern
查询模式的规则
1.* 匹配任意数量的任意符号
?配合一个任意符号
[] 匹配一个指定符号
例子:
keys * 查询所有
keys it* 查询所有以it开头
keys *heima 查询所有以heima结尾
keys ??kong 查询所有前面两个字符任意,后面以heima结尾
keys user? 查询所有以user开头最后一个字符任意
keys u[st]1 查询所有以u开头,以1结尾,中间包含一个字母,s或者t
3.key的其他操作
为key改名
rename key newkey 如果存在重复结果仍然改掉
renamenx key newkey 存在重复结果,不覆盖改名失败
sort为所有key排序
help@ generic查询相关命令的用法
查看通用组的命令包括del,dump…等等通用命令
四.数据库通用操作
1. 数据库
key值的重复问题
1.key是由程序员定义的
2.redis在使用过程中,伴随着操作数据量的增加会出现大量的数据以及对应的bug
3.数据不区分种类,类别混杂在一起,极易出现重复或者冲突
解决方案:
1.根据业务规范命名空间
2.redis为每个服务提供16个数据库,编号从0到15
3.每个数据库之间的数据相互独立
2.db基本操作
切换数据库
select index
输入密码即可
数据操作
move key db 移动数据到目标仓库
数据清除
dbsize 库中数据总量
flushdb 清除db库中数据,默认0号仓库
flushall 清空redis数据库
今天的文章redis 学习笔记(七) 业务场景分析与相关案例分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/61308.html