Redis
码农回忆录
这个作者很懒,什么都没留下…
展开
-
Redis 位图基本使用
1. 为什么需要位图在我们平时开发过程中,会有一些 bool 型数据需要存取,比如用户一年的签到记录,签了是 1,没签是 0,要记录 365 天。如果使用普通的 key/value,每个用户要记录 365个,当用户上亿的时候,需要的存储空间是惊人的。为了解决这个问题,Redis 提供了位图数据结构,这样每天的签到记录只占据一个位,365 天就是 365 个位,46 个字节 (一个稍长一点...原创 2020-04-12 12:40:45 · 4303 阅读 · 0 评论 -
Redis延时队列实现
1. zset数据结构利用zset数据结构的分值,可以利用时间戳的方式来实现一个分布式延时队列的实现; 通过zadd向zset中添加数据,然后启动一个线程去执行zrangeByScore方法获取数据即可2. 具体实现public class RedisDelayingQueue<T> { static class TaskItem<T> { ...原创 2020-04-12 12:16:12 · 4197 阅读 · 0 评论 -
Redis分布式阻塞队列
1. 数据结构ListRedis List的主要操作为lpush/lpop/rpush/rpop四种,分别代表从头部和尾部的push/pop,除此之外List还提供了两种pop操作的阻塞版本blpop/brpop,用于阻塞获取一个对象2. 实现思路利用list数据结构的阻塞操作实现take方法, 当队列元素为空是则线程阻塞此处假设redis队列不会被存满,所以push操作不会阻塞...原创 2020-04-12 12:06:02 · 5739 阅读 · 0 评论 -
Redis 实现分布式阻塞锁
1. Redis分布式锁实现原理分布式锁本质上要实现的目标就是在 Redis 里面占一个“茅坑”,当别的进程也要来占时,发现已经有人蹲在那里了,就只好放弃或者稍后再试。占坑一般是使用 setnx(set if not exists) 指令,只允许被一个客户端占坑。先来先占, 用完了,再调用 del 指令释放茅坑。死锁问题:如果逻辑执行到中间出现异常了,可能会导致 del 指令没有被调用,这样...原创 2020-04-12 03:26:05 · 11130 阅读 · 4 评论 -
Redis 基本数据结构
1. String底层实现数据结构类似java的ArrayList扩容: 小于1M是每次两倍, 大于1M每次扩容1M最大容量: 512MRedis 的字符串是动态字符串,是可以修改的字符串,内部结构实现上类似于 Java 的ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配,如图中所示,内部为当前字符串实际分配的空间 capacity 一般要高于实际字符串长度 len。当字...原创 2020-04-12 00:00:23 · 3940 阅读 · 0 评论