我看的资料是同学给的, https://github.com/Snailclimb/JavaGuide/blob/master/docs/database/Redis/redis-all.md#1-%E7%AE%80%E5%8D%95%E4%BB%8B%E7%BB%8D%E4%B8%80%E4%B8%8B-redis-%E5%91%97
有的地方看不懂,对其中的疑问做一下记录。
参考博客 https://blog.csdn.net/hezhiqiang1314/article/details/69396887
https://blog.csdn.net/qq_34337272/article/details/80012284 redis 内部使用文件事件处理器 file event handler,这个文件事件处理器是单线程的,所以 redis 才叫做单线程的模型。它采用 IO 多路复用机制同时监听多个 socket,根据 socket 上的事件来选择对应的事件处理器进行处理。
文件事件处理器的结构包含 4 个部分:
多个 socket IO 多路复用程序 文件事件分派器 事件处理器(连接应答处理器、命令请求处理器、命令回复处理器) 多个 socket 可能会并发产生不同的操作,每个操作对应不同的文件事件,但是 IO 多路复用程序会监听多个 socket,会将 socket 产生的事件放入队列中排队,事件分派器每次从队列中取出一个事件,把该事件交给对应的事件处理器进行处理。
watch命令可以监控一个或多个键,一旦有一个键被修改,之后的事务不会执行。执行EXEC命令后会取消对所有键的监控,如果不想执行事务中的命令也可以使用UNWATCH命令来取消所有键的监控。
(1)大多数事务失败是因为语法错误或者运行错误,这两种错误,在开发阶段都是可以预见的。 2.如果在一个事务中的命令出现语法错误,那么所有的命令都不会执行; 3.如果在一个事务命令出现运行错误,那么只有正确的命令会被执行 (2)Redis 为了性能方面就忽略了事务回滚。
https://segmentfault.com/a/1190000022028642 讲得非常好
Redis集群方案有三种模式. 其中主从复制模式能实现读写分离,但是不能自动转移故障,master或clave宕机都可能导致客户端请求失败。哨兵基于主从复制模式,能够自动故障转移,达到高可用,但是与主从复制模式一样,不能在线扩容,容量收到单机的配置。cluster模式是无中心化架构,实现了分布式存储,方便扩展,高可用,但是对批量操作和事务操作支持性不好。
Redis只在两个地方用了跳表,一个是有序集合sorted set,另一个是在集群节点中用作内部数据结构。
https://juejin.im/post/6844903951502934030