![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
redis
虎哥和你一起学编程
路漫漫其修远兮吾将上下而求索
展开
-
Jedis lettuce redisson的对比
jedis是同步阻塞式的,类似于Jdbc,是非线程安全的,多线程使用时需要使用连接池。 using Jedis in a multithreaded environmentYou shouldn't use the same instance from different threads because you'll have strange errors. And sometimes creating lots of Jedis instances is not good enoug...原创 2022-01-14 13:18:58 · 652 阅读 · 0 评论 -
Redis容器型数据结构的通用规则
list/set/hash/zset这四种数据结构是容器型数据结构,它们共享下面两条通用规则。 1.create if not exists:如果容器不存在,那就创建一个,再进行操作。比如rpush操作刚开始是没有列表的,Redis就会自动创建一个,然后再rpush进去新元素。 2.drop if no elements:如果容器里的元素没有了,那么立即删除容器,释放内存。这意味着lpop操作到最后一个元素,列表就消失了。...原创 2021-12-06 12:30:44 · 129 阅读 · 0 评论 -
Redis中的bitmaps
在我们平时的开发过程中,会有一些bool类型数据需要存取,比如用户一年的签到记录,签了是1,没签是0,要记录365天。如果使用普通的key/value,每个用户要记录365个,当用户数上亿的时候,需要的存储空间是惊人的。 为了解决这个问题,Redis提供了位图数据结构,这样每天的签到记录只占据了一个位,365天就是365个位,46个字节(一个稍长一点的字符串)就可以完全容纳下来,这就大大节约了存储空间。位图的最小单位是bit,每个bit的取值只能是0或1。 ...原创 2021-12-06 09:08:39 · 856 阅读 · 0 评论 -
HyperLogLog
例如一个很常见的业务问题:如果你负责开发维护一个大型的网站,有一天老板找产品经理要网站上每个网页每天的UV数据,然后让你来开发这个统计模块,你会如何实现? 如果统计PV,那非常好办,给每个网页配一个独立的Redis计数器就可以了,把这个计数器的key后缀加上当天的日期。这样来一个请求,执行incrby指令一次,最终就可以统计出所有的PV数据。 但是UV不一样,它要去重,同一个用户一天之内的多次访问请求只能计数一次。这就要求每一个网页请求都需要带...原创 2021-12-03 23:06:18 · 260 阅读 · 0 评论 -
Redis持久化方式AOF和RDB
redis有两种持久化方式,一种是RDB(快照方式),另外一种是aof(命令追加的方式)。由于rdb恢复快,但是只使用rdb会导致丢数据。aof比较全,但是由于保存了很多的过程化的数据,所以文件会变的非常大,后来出现了一个rewrite的机制,可以去除一些过程化的数据。 所以通常我们都会是采用混合模式,即同时使用rdb和aof两种方式,先通过rdb快速恢复到某一时刻,然后再执行aof里面的命令进行补充,既可以保证效率,也可以保证不丢失数据。...原创 2021-11-27 22:17:04 · 72 阅读 · 0 评论 -
缓存击穿的解决方案
缓存击穿指的是某些热点Key在某一时间过期,从而导致大量的请求打到数据库上。解决方案: 1.热点数据不过期 2.通过分布式锁,保证同一时间只有一个线程能访问。...原创 2021-11-19 09:48:03 · 449 阅读 · 0 评论 -
redis中的字符串实现(sds)
Redis中的字符串是可以修改的字符串,在内存中它是以字节数组的形式存在的。我们知道C语言里面的字符串标准形式是以NULL(即0x\0)作为结束符,但是在Redis里面,字符串不是这么表示的。因为要获取以NULL结尾的字符串的长度使用的是strlen标准库函数,这个函数的算法复杂度是O(n),它需要对字节数组进行遍历扫描,作为单线程的Redis表示承受不起。 Redis的字符串叫做"SDS",也就是simple dynamic string(简单动态字符串)。它的结构是一个带长度信...原创 2021-11-18 10:44:35 · 754 阅读 · 0 评论 -
Redis并发竞争问题
什么是Redis的并发竞争问题? 当多个客户端并发的去修改同一个key时,比如按照顺序设置成v1,v2,v3,v4。但是由于网络延迟等原因,v2滞后于v4达到,那么最后期望的值是v4,但是结果却是v2。缓存一致性问题也类似于这个问题。解决方案:1.分布式锁+时间戳(版本号)2.队列串行化...原创 2021-09-13 19:06:28 · 190 阅读 · 0 评论 -
redis ttl
看一下官方文档的解释 Returns the remaining time to live of a key that has a timeout. This introspection capability allows a Redis client to check how many seconds a given key will continue to be part of the dataset.In Redis 2.6 or older the command r...原创 2021-05-10 14:05:34 · 224 阅读 · 0 评论 -
redis缓存淘汰策略
# MAXMEMORY POLICY: how Redis will select what to remove when maxmemory# is reached. You can select among five behaviors:## volatile-lru -> Evict using approximated LRU among the keys with an expire set.# allkeys-lru -> Evict any key usi...原创 2021-04-23 17:08:39 · 64 阅读 · 0 评论 -
Redis登陆客户端需要密码
通常为了安全起见,会给redis设置密码,那么当我们用redis-cli来使用客户端时,如果需要登陆,该如何输入密码呢? [root ~]$ redis-cli127.0.0.1:6379> ping (error) NOAUTH Authentication required.127.0.0.1:6379> auth passwordOK127.0.0.1:6379> pingPONG127.0.0.1:6379> ...原创 2020-12-24 14:33:51 · 1978 阅读 · 0 评论 -
redis事务操作
redis也支持事务操作,可以将一批操作加入队列,然后一次批量执行,保证原子性。 1.开启事务 localhost:0>multi"OK" 2.设置批量命令(加入执行队列)localhost:0>set msg "Hello World""QUEUED"localhost:0>get msg"QUEUED" 3.执行localhost:0>exec 1...原创 2020-10-20 17:08:55 · 134 阅读 · 0 评论 -
redis key过期监听实现延时队列
延时队列有多种实现方式,可以使用mq来实现,也可以通过redis key过期事件监听来实现。 下面就来一个redis key过期事件监听的demo. 1.先引入redis的依赖。 <dependency> <artifactId>spring-boot-starter-data-redis</artifactId> <groupId&g...原创 2020-07-24 09:53:17 · 1712 阅读 · 1 评论