Redis为什么快?高性能设计之epoll和IO多路复用深度解析IO多路复用解决了哪些问题Redis单线程如何处理那么多并发客户端连接,为什么单线程,为什么快Redis的IO多路复用Redis利用epoll来实现IO多路复用,将连接信息和事件放到队列中,一次放到文件事件分派器,事件分派器将事件分发给事件处理器。Redis是跑在单线程中的,所有的操作都是按照额序线性执行的,但是由于读写操作等待用户输入或输出都是阻塞的,所以I/O操作在一般情况下往往不能直接返回,这会导致某一文件的T/O阻塞导致整个进程无法对其它客户提供服务,而I/O多路复用就是为了解决这个问题而出现所谓I/0多路复用机制,就是说通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或写就绪),能够通知程序进行相应的读写操作。这种机制的使用需要select 、poll、epoll来配合。多个连接共用一个阻塞对象,应用程序只需要在一个阻塞对象上等待,无需阻塞等待所有连接。当某条连接有新的数据可以处理时,操作系统通知应用程序,线程从阻塞状态返回,开始进行业务处理。Redis服务采用Reactor的方式来实现文件事件
Redis经典五大类型源码及底层实现面试常问的Redis对象object.c字符串t_string.c列表t_list.c字典t_hash.c集合及有序集合t_set.c和t_zset.c数据流t_stream.cRedis基本数据结构(骨架)简单动态字符串sds.c整数集合intset.c压缩列表ziplist.c快速链表quicklist.clistpack字典dict.cRedis数据库的实现数据库的底层实现db.c持久化rdb.c和aof.cRedis服务端和客户端事件驱动ae.c和ae_epoll.c网络连接anet.c和networking.c服务端程序server.c客户端程序redis-cli.c其他主从复制replication.c哨兵sentinel.c集群cluster.c其他数据结构,如hyperloglog.c、geo.c等其他功能,如pub/sub、Lua脚本源码分析Redis中每个对象都是一个redisObject结构每个键值对都会有一个digtEntry(源码位置:dict.h)重点:从dictEntry到RedisObjectZ经典5大数据结构解析//
Redis的缓存过期淘汰策略面试题生产上你们的redis内存设置多少?如何配置、修改redis的内存大小如果内存满了你怎么办redis默认内存多少?在哪里查看?如何设置修改?内存满了会报 oom往redis里面写的数据是怎么没了的?它是如何删除的?redis过期键的删除策略如果一个键是过期的,那它到了过期时间之后是不是马上就从内存中被被删除呢? ?如果回答yes,立即删除,你自己走还是面试官送你走?如果不是,那过期后到底什么时候被删除呢?﹖是个什么操作?三种不同的删除策略立即删除Redis不可能时时刻刻遍历所有被设置了生存时间的key,来检测数据是否已经到达过期时间,然后对它进行删除。立即删除能保证内存中数据的最大新鲜度,因为它保证过期键值会在过期后马上被删除,其所占用的内存也会随之释放。但是立即删除对cpu是最不友好的。因为删除操作会占用cpu的时间,如果刚好碰上了cpu很忙的时候,比如正在做交集或排序等计算的时候,就会给cpu造成额外的压力,让CPU心累,时时需要删除,忙死。这会产生大量的性能消耗,同时也会影响数据的读取操作。总结:对CPU不友好,用处理器性能换取存储空间(拿时间换
Redlock算法和底层源码分析当前代码用v8.0的Redis分布式锁-Redlock红锁算法Distributed locks with Redis产生原因----- 单点故障:redis之父提出了Redlock算法解决这个问题Redis也提供了Redlock算法,用来实现基于多个实例的分布式锁。锁变量由多个实例维护,即使有实例发生了故障,锁变量仍然是存在的,客户端还是可以完成锁操作。Redlock算法是实现高可靠分布式锁的一种有效解决方案,可以在实际开发中使用。设计理念该方案为了解决数据不一致的问题,直接舍弃了异步复制只使用master节点,同时由于舍弃了slave,为了保证可用性,引入了N个节点,官方建议是5。演示用3台实例来做说明。客户端只有在满足下面的这两个条件时,才能认为是加锁成功。条件1:客户端从超过半数(大于等于N/2+1)的Redis实例上成功获取到了锁;条件2:客户端获取锁的总耗时没有超过锁的有效时间。redisson实现pom<!--redisson--> <dependency> <groupId>org.re
面试题Redis除了拿来做缓存,你还见过基于Redis的什么用法?数据共享,分布式Session分布式锁全局ID计算器、点赞位统计购物车轻量级消息队列---list、stream抽奖点赞、签到、打卡差集交集并集,用户关注、可能认识的人,推荐模型热点新闻、热搜排行榜Redis 做分布式锁的时候有需要注意的问题?你们公司自己实现的分布式锁是否用的setnx命令实现(大厂一定不可以)?这个是最合适的吗?你如何考虑分布式锁的可重入问题?如果是Redis是单点部署的,会带来什么问题?Redis集群模式下,比如主从模式,CAP方面有没有什么问题呢?那你简单的介绍一下Redlock吧?你简历上写redisson,你谈谈Redis分布式锁如何续期?看门狗知道吗?锁的种类单机版同一个JVM虚拟机内,synchronized或者Lock接口分布式多个不同JⅣM虚拟机,单机的线程锁机制不再起作用,资源类在不同的服务器之间共享了。一个靠谱分布式锁需要具备的条件和刚需独占性----OnlyOne,任何时刻只能有且仅有一个线程持有高可用----若redis集群环境下,不能因为某一个节点挂了而出现获取锁和释放锁失败
ZzRG
状态 统计 图床 • •