分布式kv存储库,C语言,遵守BSD,6379
------------------------------------------------
六种结构:
string list hash set zset hyperloglog
第六种是2.8后新增的,用于基数统计的结构,占用内存小(12k),只存计数不存值。
------------------------------------------------
与memcache区别
1、Redis可持久化
2、多种数据结构类型
3、memcache Value有大小限制(1M)
4、memcache相对快
--------------------------------------------------------
Redis持久化方式
1、(镜像)BDS,使用save或者bgsave,后者fork一个子进程保存快照,可以手动或者通过配置合适的时机自动保存。
2、增量--AOF,保存的是非查询操作,以增量的方式保存;
相对于1恢复比较慢,文件大,但可读性好,不阻塞IO,消耗IO少
---------------------------------------------------------------
分布式锁的实现方式之一(zk也可以实现)
1、使用setnx,容易出现异常导致的锁不释放,解决方法设置超时时间
2、使用基于redis实现的redission框架,原理是发送lur脚步到redis执行,脚步执行本身具有原子性。
-------------------------------------------------------------------------
部署方式
1、cluser,当前5主5从,先按主从顺序各自启动,后做链接,成集群。
2、redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384(2的14次方) 求余数
扩容或缩减
1、没有采用一致性hash,使用slot移动保证节点变化导致的问题
2、会导致临近节点数据暂时不可用,也可采用虚拟节点(一node分配两份slot)解决。
---------------------------------
redis的事务不是真正的事务,可能出现执行一半的情况
-------------------------------------------------------------------------------
Redis集群是的主节点们是对等节点,采用gossip(去中心化思路的分布式协议)通讯,保证最终一致性
Gossip协议是可扩展的,因为它只需要O(logN) 个周期就能把消息传播给所有节点
优点:性能好、可靠、轻量
缺点:拜占庭问题:即,如果有一个恶意传播消息的节点,Gossip协议的分布式系统就会出问题。
https://www.jianshu.com/p/54eab117e6ae
---------------------------------------------------------------------------------
性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s
-----
支持发布订阅消息通信模式,可以用来做队列
https://www.runoob.com/redis/redis-pub-sub.html
-----------------------------------------
Zset的底层实现数据结构是跳表,查找或插入时间复杂度为O(logn),空间复杂度为2n
网友评论