Redis
HXACA_XMUT
我差不多已经是条咸鱼了_(:зゝ∠)_
展开
-
LRU的简单实现
LRU是常用的缓存淘汰策略。缓存的“热度”可以看作是没有访问该缓存的时间,所以会维护一个有序列表,每次访问缓存时,将访问的缓存移动到最前面。当超过容量限制后,删除最久没有被访问的。LRU有一些问题,比如如果某个缓存只是偶尔被访问,那也可能再某个情况下,它恰好之前刚被访问一次,导致他不会被删除。所以有改进的方法LFU,LFU还会维护访问次数。Redis中使用的是近似的LRU,因为LRU会造成大量的空间消耗。Redis通过维护前一次访问时间,每次随机选择几个,删除最久未被访问的,重复采样知道满足内存要求。.原创 2020-05-21 19:01:13 · 168 阅读 · 0 评论 -
使用Redis实现一个简单的消息队列
使用list数据结构实现一个简单的消息队列list数据结构提供一种阻塞读取的方式blpop/rlpop,使用该接口可以再队列没有消息时先休眠,有消息过来时再立即苏醒,消息几乎无延迟。阻塞超过设定的timeout后会返回一个空值。代码实现:package com.xliu.chapter1;import redis.clients.jedis.Jedis;import java.s...原创 2020-04-23 13:39:23 · 227 阅读 · 0 评论 -
实现一个简单的漏斗限流
限流:系统能力有限或出现有恶意请求时,需要组织部分请求,防止系统压力过大造成宕机。也就是在规定时间内一个操作只能执行有限次数,超出就是非法行为。简单限流:通过维护某个时间区间,判断改时间区间内发生的次数。漏斗限流:在每次试图处理请求前,先计算和上一次请求的间隔,并恢复该部分的空间。只有在空间允许的情况下才会放行该请求。redis不能直接使用以下代码思路,因为无法保证操作的原子性,如果为...原创 2020-04-22 19:26:02 · 317 阅读 · 0 评论 -
Redis中HyperLogLog的一些小知识
HyperLogLog是Redis的高级数据结构,可以实现统计用户访问情况中的UV情况,也就是独立访问次数,重复用户在每天只算一次。HyperLogLog提供了一种不精确的去重计数方案,标准误差为0.81%。实现原理:通过记录低位最长的连续零位数据,估计出总的数量。经过试验发现随机数总数的对数和最长零位长度存在显著线性关系。通过设置多个桶,计算平均估计,达到较准确的结果使...原创 2020-04-22 10:31:52 · 178 阅读 · 0 评论 -
Redis实现一个简单的延时队列
延时队列通过redis中的zset我们可以实现一个简单的延时队列。通过将score设置为时间,然后多线程轮训的去查询是否有到期的可以执行的任务。考虑到多线程并发,使用zrem去保证每一个任务只会被执行1次,这里也可以使用lua脚本来优化,减少空取的情况。代码实现package com.xliu.chapter1;import com.alibaba.fastjson.JSON...原创 2020-04-22 09:16:18 · 244 阅读 · 0 评论 -
Redis实现可重入分布式锁
分布式锁通过在redis设置一个特定值,只有成功设置这个值得线程,才被看做拿到了锁,并能去使用一些资源,使用结束后删除该值,使得其他线程能去拿到高锁。由于业务逻辑中可能出现异常,导致删除操作没有被执行,引发死锁,所以一般会给锁设置一个较短的有效值。超时问题由于业务逻辑有可能比较复杂,导致锁已经失效,但业务逻辑还没执行结束。所以一般不建议在较长时间的业务中使用redis分布式锁。出...原创 2020-04-21 14:44:08 · 884 阅读 · 0 评论