
Redis
文章平均质量分 68
一蓑烟雨任平生2024
这个作者很懒,什么都没留下…
展开
-
分布式限流——Redis + Lua实现滑动窗口算法
通过以上步骤,Zset能够有效地维护一个时间窗口内的请求数量,从而达到限流的目的,确保服务在高峰期不会因为过多请求而导致性能瓶颈。Zset的score字段用来存储每个请求的时间戳。原创 2024-04-17 21:19:28 · 1701 阅读 · 0 评论 -
分布式限流——Redis + Lua脚本实现令牌桶算法
这个Lua脚本简化了令牌桶算法的实现,实际应用中可能还需要考虑更多细节,例如如何精确地按照时间间隔补充令牌、如何处理多个请求同时竞争令牌等情况。客户端在调用这个Lua脚本时,应当传递正确的参数,包括令牌桶的键名以及令牌相关的配置信息。此外,在高并发场景下,为了避免多个客户端同时修改令牌数,Lua脚本的执行必须是原子性的,这正是Redis.eval/evalsha命令所提供的功能。原创 2024-04-17 21:09:52 · 1229 阅读 · 0 评论 -
Redis I/O多路复用
I/O多路复用原创 2024-03-24 10:15:01 · 522 阅读 · 0 评论 -
RedisObject是什么?
Redis底层数据结构原创 2024-03-23 22:05:24 · 136 阅读 · 0 评论 -
Redis的String类型为什么重新设计使用了SDS数据结构呢
综上所述,SDS 设计旨在提高 Redis 的性能、安全性及对不同场景的适应能力,尤其对于高并发环境下频繁进行字符串操作的服务端数据库系统来说,这些优化显得尤为重要。原创 2024-03-23 21:59:56 · 537 阅读 · 0 评论 -
手写一个LRU
在这个例子中,因为没有其他键值对被访问过,所以最早插入的键值对1 -> One是当前最久未使用的项。)时,由于缓存容量限制为3个元素,且之前已经有三个键值对(1 -> One, 2 -> Two, 3 -> Three)存在,此时缓存已满。由于LinkedHashMap的特性,在插入新的键值对时,它会自动将新插入的项移动到链表尾部,表示它是最近被访问或修改的。方法,我们设置了当缓存大小超过设定容量(即size() > cacheSize)时,应当移除最旧的条目(即最近最少使用的条目)。原创 2024-03-23 16:43:57 · 275 阅读 · 0 评论 -
Redis如何删除大key
命令可以删除多种类型的数据,不仅限于 String 类型。无论是 String、Hash、List、Set、Sorted Set 或其他任何类型的数据,只要它们是存储在 Redis 中的键(key),都可以使用。命令类似,但它会在后台异步删除key,不会阻塞当前客户端,也不会阻塞Redis服务器的主线程,因此可以更安全地删除大key。执行删除操作的方式是非阻塞异步的。因此,无论数据类型如何,只要你想异步删除一个或多个 Redis 键,都可以使用。命令删除任何类型的单个键或者一批键,就如同使用。原创 2024-03-23 10:15:00 · 1304 阅读 · 0 评论 -
Redis的脑裂问题
具体来说,在Redis环境下,当主节点与一部分从节点之间因网络问题而失去联系,但主节点依然可以与另一部分从节点或者客户端通讯时,原本的主节点可能继续接受写操作,而与它失去联系的从节点或哨兵可能认为主节点已不可达,并重新选举出一个新的主节点,这时就形成了两个独立的主节点,每个主节点都能接受写请求,从而导致数据冲突和不一致。我们这里配置的是 10 秒,也就是说 master 10 秒都得不到一个从节点的响应,就会认为这个从节点失联,停止接受新的写入命令请求。原创 2024-03-20 21:33:00 · 965 阅读 · 0 评论 -
Caffeine缓存
本地缓存基于本地环境的内存,访问速度非常快,对于一些变更频率低、实时性要求低的数据,可以放在本地缓存中,提升访问速度。类的远程缓存间的数据交互,减少网络 I/O 开销,降低这一过程中在网络通信上的耗时。Redis + Caffeine = 王炸!使用本地缓存能够减少和。原创 2024-03-12 21:08:39 · 901 阅读 · 0 评论 -
Redis事务
数据库事务与Redis事务的区别。原创 2024-03-09 14:48:17 · 428 阅读 · 0 评论 -
Redis持久化:RDB和AOF
RDB 和 AOF原创 2024-03-09 14:37:26 · 468 阅读 · 0 评论 -
Redis的HyperLogLog原理介绍
Redis 的 HyperLogLog原创 2024-03-09 10:51:40 · 1660 阅读 · 0 评论 -
本地缓存和分布式缓存有什么区别?如何选择?
缺点1、高并发的场景,,需要花较长的时间才能恢复;2、每个应用节点都会维护自己的单独缓存,。转载 2024-03-07 22:51:30 · 264 阅读 · 0 评论 -
惰性删除、定期删除和Redis的淘汰策略有什么区别?
例如,默认情况下Redis每秒随机抽取一定数量的键检查它们的过期时间,并删除已过期的键。这种策略节省了CPU资源,因为它只在访问时才进行检查和删除操作,但存在可能长时间不访问而导致内存无法及时释放的风险。综上所述,惰性删除和定期删除是用于处理有过期时间设定的键的删除方式,而Redis的淘汰策略主要用于解决未设置过期时间的键在内存满载时的内存管理问题。,它们共同作用以确保过期数据能够被有效地清理,但主要针对的是带有过期时间的键。,与过期键的删除机制不同。原创 2024-03-07 22:12:33 · 727 阅读 · 0 评论 -
Redis为什么这么快?
综上所述,Redis的设计充分利用了内存存储的优势,同时通过精简的线程模型、高效的内部数据结构和I/O处理方式,使其在高性能场景下表现突出。原创 2024-03-07 22:04:16 · 382 阅读 · 0 评论 -
Redis是单线程还是多线程?
一种同步的IO模型,实现一个线程监视多个文件句柄,一旦某个文件句柄就绪,就能通知到对应程序进行相应的读写操作,没有文件句柄就绪时,就会阻塞应用程序,从而释放CPU资源。I/O网络I/O,尤其在操作系统层面指数据在内核态和用户态之间的读写操作多路多个客户端连接(连接就是套接字描述符,即socket或者channel)复用复用一个或者几个线程连接IO多路复用也就是说一个或者一组线程处理多个TCP,使用单进程就能实现同时处理多个客户端的连接,无需创建或者维护过多的进程/线程总结。转载 2024-03-07 20:31:20 · 30 阅读 · 0 评论 -
Redisson分布式锁
缺陷:获取锁、比较锁的值、删除锁,这三步是非原子性的。中途又可能锁自动过期了,又被其他客户端抢占了锁,导致删锁时把其他客户端占用的锁删了。改进:每次占用的锁,随机设为较大的值,主动删除锁时,比较锁的值和自己设置的值是否相等。改进:设置锁的自动过期时间,过一段时间后,自动删除锁,这样其他线程就能获取到锁了。缺陷:主动删除锁时,因锁的值都是相同的,将其他客户端占用的锁删除了。改进:使用 Lua 脚本进行获取锁、比较锁、删除锁的原子操作。缺陷:占锁和设置锁过期时间是分步两步执行的,不是原子操作。转载 2024-03-04 23:37:02 · 592 阅读 · 0 评论 -
LRU和LFU的区别
这两种策略各有优缺点,适用场景也不同。LRU实现相对简单且对于局部性较好的场景表现良好,而LFU则可能对那些访问频率稳定但不一定近期访问过的数据有更好的保留效果,但其实现复杂度和资源消耗相对较高。原创 2024-03-04 19:24:48 · 868 阅读 · 0 评论 -
Redis的淘汰策略
缓存过期淘汰策略原创 2024-03-03 23:29:38 · 516 阅读 · 0 评论 -
Redis几大数据类型
Redis 数据类型及应用场景。原创 2024-03-03 23:17:21 · 435 阅读 · 0 评论 -
Redis的主从复制
例如,如果主节点的offset是1000,而从节点的offset是500,那么部分复制就需要将offset为501-1000的数据传递给从节点。执行复制的双方,主从节点,分别会维护一个复制偏移量offset: 主节点每次向从节点同步了N字节数据后,将修改自己的复制偏移量offset+N 从节点每次从主节点同步了N字节数据后,将修改自己的复制偏移量offset+N。作为复制积压缓冲区,其默认大小为1MB 在主节点进行命令传播时,不仅会将写命令同步到从节点,还会将写命令写入复制积压缓冲区。原创 2024-03-03 21:53:43 · 430 阅读 · 0 评论 -
布隆过滤器
布隆过滤器原理原创 2024-03-03 21:43:16 · 400 阅读 · 0 评论 -
数据库与缓存更新一致性四种策略
1、更新缓存的时候失败了(或者更新的时候晚了被其他线程读取到的还是旧值),导致缓存中存的一直都是脏数据;2、多个线程在更新时,因为两个更新步骤执行顺序不一致,可能会导致数据错乱1、不太推荐,业务上一般把mysql最后保障2、多线程环境下,A、B两个线程有快有慢,最后可能导致缓存与数据库不一致;1、多线程下,A还没更新完数据库;B进来查缓存没查到,就会读取数据库的旧值写入缓存(延迟双删:可以等一会再删除一遍缓存)2、删了缓存假如这个时候流量激增查询这个key,会导致缓存击穿数据库。原创 2024-03-03 11:17:46 · 847 阅读 · 0 评论 -
缓存双写一致性
Redis与Mysql一致性原创 2024-03-03 10:44:24 · 341 阅读 · 0 评论 -
Redis是单线程还是多线程?
单线程为什么这么快的原因:后来引入了多线程是因为:原创 2024-03-02 21:05:35 · 564 阅读 · 0 评论 -
Redis集群模式
面试题:为什么Redis的最大槽位是16384?原创 2024-03-02 20:36:47 · 418 阅读 · 0 评论 -
Redis的哨兵模式
Redis哨兵模式原创 2024-03-02 20:13:56 · 365 阅读 · 0 评论 -
redis快速和支持高并发的原因
一.Redis的高并发和快速原因1.redis是基于内存的,内存的读写速度非常快;2.redis是单线程的,省去了很多上下文切换线程的时间;3.redis使用多路复用技术,可以处理并发的连接。非阻塞IO 内部实现采用epoll,采用了epoll+自己实现的简单的事件框架。epoll中的读、写、关闭、连接都转化成了事件,然后利用epoll的多路复用特性,绝不在io上浪费一点时间。二.为什么Redis是单线程的1.官方答案因为Redis是基于内存的操作,CPU不是Redis的瓶颈,.转载 2021-02-03 14:55:13 · 964 阅读 · 1 评论 -
SpringBoot整合Redis及Redis工具类撰写(RedisTemplate)
https://www.cnblogs.com/zeng1994/p/03303c805731afc9aa9c60dbbd32a323.html原创 2020-11-10 11:05:24 · 197 阅读 · 0 评论 -
redis的过期策略
1、设置过期时间expire key time(以秒为单位)--这是最常用的方式 setex(String key, int seconds, String value)--字符串独有的方式具体的使用方式:查看"java企业项目开发实践"的第九章 企业项目开发--分布式缓存Redis(1)和第十章 企业项目开发--分布式缓存Redis(2)注意:除了字符串自己独有设置过期时间的方法外,其他方法都需要依靠expire方法来设置时间 如果没有设置时间,那缓存就是永不过期 如果设置了过期时间,原创 2020-11-09 17:58:10 · 270 阅读 · 0 评论 -
Redis的三个客户端框架比较:Jedis,Redisson,Lettuce
Jedis api 在线网址:http://tool.oschina.net/uploads/apidocs/redis/clients/jedis/Jedis.htmlredisson 官网地址:https://redisson.org/redisson git项目地址:https://github.com/redisson/redissonlettuce 官网地址:https://lettuce.io/lettuce git项目地址:https://github.com/lettuce-原创 2020-11-05 16:56:58 · 435 阅读 · 0 评论 -
Redis缓存穿透,缓存击穿,缓存雪崩
缓存穿透、缓存击穿、缓存雪崩原创 2020-09-07 15:33:51 · 216 阅读 · 0 评论 -
redis常用命令
Key 检查key是否存在EXISTS key搜索某关键字KEYS k*返回一个Key所影响的的类型TYPE key keys * 获取所有的key select 0 选择第一个库 move myString 1 将当前的数据库key移动到某个数据库,目标库有,则不能移动 flush db 清除指定库 randomkey 随机返回key type key 类型 se...原创 2020-08-13 09:08:36 · 215 阅读 · 0 评论 -
Redis:有序集合类型zset的实现原理
目录1. 编码2. 实现zset的常用命令skiplist介绍skiplist与平衡树、哈希表的比较Redis中的skiplist实现Redis为什么用skiplist而不用平衡树?Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。集合是通过哈希表实现的,所以添加,删除转载 2020-09-07 15:10:42 · 1903 阅读 · 0 评论