redis
码农小麦
这个作者很懒,什么都没留下…
展开
-
在redis中使用lua脚本,使用脚本完成限流操作
redis支持lua脚本,可以在lua脚本中将多个redis执行单元组合在一起,完成原子性操作。先来看一个使用lua的简单示例:eval "if redis.call('get',KEYS[1]) == ARGV[1] then return 0 else return -1 end" 1 name star基本语法就是这样,KEYS用来传递redis要使用key值,ARGV用来传递脚本需要的值参数(你要倒行逆施用ARGV传key值,KEYS当作value也是ok的),只是最后要指定KEYS参数个数,原创 2020-07-09 22:05:32 · 2028 阅读 · 1 评论 -
基于单节点redis实现分布式锁
使用redis实现分布式锁基本就2步:第一多线程请求处理获取锁时,使用setnx指令,只有当key不存在时才设值,注意设置超时时间。set key value [expiration EX seconds|PX milliseconds] [NX|XX]第二相关业务处理完成之后,谁加的锁应该由谁去及时释放,即删除指定的key,注意删除时要匹配加锁线程的value,避免因超时误删其它线程的锁,这里使用Lua脚本执行原子操作,也可以先判断key value再del。if redis.call("get"原创 2020-05-16 11:58:48 · 1529 阅读 · 0 评论 -
【redis】使用redis位图轻松实时统计日活
先看一个场景:如果某网站有有1亿用户,用户访问过该网站标记为活跃,如何统计网站DAU(Daily Active Use),根据DAU统计WAU或MAU。1.使用传统的数据库表可以实现,用户只要访问了该网站则按日期,用户号插入一条记录,至少需要两个字段:如果日活很高,表会迅速扩张,按日、周、月统计还需要count、sum、group效率较低,消耗了数据库资源还难以快速统计目标数据。2.换个思路,假设有一个大大的数组,数组可以自动扩容,每个用户是否活跃看作数组中的值(1活跃0不活跃,默认为0),数组的原创 2020-05-12 16:06:28 · 3019 阅读 · 1 评论