redis
gqtallhappy
程序员
展开
-
Redis 与 Memcached的区别
共同点 :都是基于内存的数据库,一般都用来当做缓存使用。都有过期策略。两者的性能都非常高。 区别 :Redis 支持更丰富的数据类型(支持更复杂的应用场景)**。Redis 不仅仅支持简单的 k/v 类型的数据,同时还提供 list,set,zset,hash 等数据结构的存储。Memcached 只支持最简单的 k/v 数据类型。 Redis 支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用,而 Memecache 把数据全部存在内存之中。 Redis 有灾难恢复机.原创 2021-12-05 21:32:41 · 171 阅读 · 0 评论 -
Redis的跳表
快速索引,内存占用、对范围查找的支持 其中,插入、删除、查找以及迭代输出有序序列这几个操作,红黑树也可以完成,时间复杂度和跳表是一样的。 但是,按照区间查找数据这个操作,红黑树的效率没有跳表高。跳表可以在 O(logn)O(logn) 时间复杂度定位区间的起点,然后在原始链表中顺序向后查询就可以了,这样非常高效。 此外,相比于红黑树,跳表还具有代码更容易实现、可读性好、不容易出错、更加灵活等优点,因此 Redis 用跳表来实现有序集合。 ...原创 2021-12-05 21:32:07 · 302 阅读 · 0 评论 -
redis
AOF(Append Only File):将被执行的写命令写到AOF文件的末尾。 RDB(Redis DataBase):通过创建快照来获取存储在内存里面的数据在某个时间点上的副本。在创建快照之后,用户可以对快照进行备份,可以将快照复制到其他服务器从而创建相同数据的服务器副本。(如果系统真的发生崩溃,用户将丢失最近一次生成快照之后更改的所有数据。) AOF文件比RDB更新频率高,优先使用AOF还原。 AOF比RDB更安全也更大。 RDB性能比AOF好。 如果两个都配了优先加载AOF ...原创 2021-12-05 21:31:20 · 295 阅读 · 0 评论 -
Redis的数据淘汰策略和数据过期后的删除策略
Redis的数据淘汰策略 volatile-lru(least recently used):从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰 volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰 volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰 allkeys-lru(least recently used):当内存原创 2021-12-05 21:30:44 · 501 阅读 · 0 评论 -
Redis的雪崩、击穿、穿透
Redis 缓存雪崩 当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,会给后端系统带来很大压力。导致系统崩溃。 如何避免?1:在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个key只允许一个线程查询数据和写缓存,其他线程等待。2:做二级缓存,A1为原始缓存,A2为拷贝缓存,A1失效时,可以访问A2,A1缓存失效时间设置为短期,A2设置为长期 3:不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀 Redis 缓存击穿 对于设置了过期时原创 2021-12-05 21:29:49 · 52 阅读 · 0 评论 -
mysql 与 redis怎么做到强一致性
场景一:先删除缓存在修改数据 这种方式在并发量小的时候是没有问题的,如果在高并发量的环境下,删除缓存,还没有完成写库,另一个请求来了,发现缓存为空,从数据库获取数据然后更新缓存,那么这个时候缓存中的数据其实是脏数据。 场景二: 先修改数据后删缓存 这种方式,主要是极端情况下,已经完成了数据库写库,但是恰巧线程宕掉了,此时缓存和数据库就没有保持一致性。 解决方案 延时双删策略 mysql binlog 启动Canal客户端获取binlog日志详情信息–> 逻.原创 2021-12-03 18:13:14 · 287 阅读 · 0 评论