可以保证操作的原子性。
使用set key ex 5 nx value,加锁之后如果处理时间太长,锁会自动释放,可能会被下一个线程占用。
可重入性值得是线程在持有锁的情况下再次请求加锁,可以通过ThreadLocal存储当前线程池有的锁的次数
功能强大:
lpush,rpush
blpop,brpop
队列为空时会进入休眠状态,有数据时会立即醒过来,但是闲置过久,服务器会主动断开链接,减少资源占用,因此需要捕获异常,进行重试
使用zset实现延时队列,将消息序列化为一个字符串,作为value,消息的到期时间作为:当前时间+过期时间
使用多个线程轮询zset获取到期的定时任务,使用zrangebyscore获取,如果获取为空则sleep之后继续获取
统计365天的签到记录
1.基本命令
setbit
getbit
bitcount,可以统计1/0的个数
bitpos ,定位第一个0/1的位置
bitfield,批量对指定位进行处理
bitfield key set u8 8 97
从第8位开始,将接下来的8个位用无符号数97代替
统计UV数,误差率0.81%,数量达到阈值后会固定占据12K的空间
使用多个桶,将数据分布到不同的桶中,然后甲醛平均低位连续0的个数,用以估计数据量
用来处理大数据量情况下的是否存在的问题,有一定的误判率。如爬虫对URL的去重;垃圾邮件的过滤
1.基本命令
2.实现
实际是一个大型的位数组和几个不一样的无偏hash(hash值计算的比较均匀),添加元素时根据key计算hash值,然后按照数组长度取模获取一个位置,然后其他的hash函数也都计算出来位置,将这几个位置都置为1就完成了add操作
3…误判
返回结果是不存在,那么一定是不存在;返回结果是存在,那么可能不存在,影响因素
系统处理能力有限,阻止计划外的请求继续施压。
值设定:
操作步骤:
漏斗的剩余容量代表当前行为可持续进行的操作数量,漏斗的流水速率代表该系统允许行为的最大速率。
1.实现
每次流水前都会灌水,更具间隙事件和流水速率计算剩余空间,能腾出多少空间取决于过去留了多少水,空间占用是一个常量,但是该方案不具有原子性
2.可以通过redis-cells组件实现
cl.throttle key 15 30 60,参数分别代表:
返回值(按顺序):
将地图经纬度坐标映射到一维,通过zset进行维护,将score还原成坐标值就可以得到元素的原始坐标。
1.基本命令
geoadd添加
geoadd company 11 22 juejin
geodist计算距离
geodist company juejin xiaomi km(m,km,ml,ft)
geopos、geohash获取位置
geopos company juejin:返回经纬度
geohash company juejin:返回经纬度的base32编码
georadiusbymember获取附件
georadiusbymember company ireader 20 km count 3 asc
2.数据量大时建议按照地区进行划分(国家、省、市)
扫描全局key值
支持模式匹配,一次遍历全部数据
scan 0 match key99* count 100
参数:
cursor:游标,全局hash数组的下标,为0代表遍历结束
key的匹配模式
遍历的limit hint,是遍历的卡槽数量,而不是返回的元素个数
遍历顺序:
高位加法,是由rehash的规则导致的,rehash时会将下标为xxx的数据rehash到0xxx和1xxx,而采用高位加法刚好可以顺序遍历到,同时rehash时会遍历新旧两个字典结构汇总返回数据
大key扫描:
redis-cli -h 127.0.0.1 -p --bigkey -i 0.1每隔100条就会休眠0.1秒,避免ops剧烈抬升,但是扫描时间会变长
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- awee.cn 版权所有 湘ICP备2023022495号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务