redis技术
1. redis:
a) redis:redis本质上是一个key-value类型的数据库,整个数据库都在内存中,定期通过异步将数据存储在硬盘上,由于是纯内存操作,所以redis的性能非常好,每秒支持10万次操作
b) redis支持保存多种数据结构,单个value的最大限制是1GB
c) redis是保存在内存中的,所以数据库容量容易受到物理内存的限制,不能用作海量数据的高性能读写,所以redis的适用场景主要是在较小数据量的高性能读写上
d) redis的性能问题:
i. master写内存快照,save命令调度rdbsave函数,会阻塞主线程的工作,所以当快照比较大的时候,对性能影响是特别大的
ii. masterAOF持久化,aof文件不断增加,会影响master重启的恢复速度
iii. master调用方法重写aof的时候,会占用大量内存资源和cpu资源
iv. redis主从复制的性能问题
e) redis的数据策略:
i. volatile-lru:使用LRU算法从已设置过期时间的数据集合中淘汰数据。
ii. volatile-ttl:从已设置过期时间的数据集合中挑选即将过期的数据淘汰。
iii. volatile-random:从已设置过期时间的数据集合中随机挑选数据淘汰。
iv. allkeys-lru:使用LRU算法从所有数据集合中淘汰数据。
v. allkeys-random:从数据集合中任意选择数据淘汰
vi. no-enviction:禁止淘汰数据。
a) RDB是在某个时间点将数据写入一个临时文件,持久化结束后,用这个临时文件替换上次持久化的文件,达到数据恢复。
b) 优点:使用单独子进程来进行持久化,主进程不会进行任何IO操作,保证了redis的高性能
c) 缺点:RDB是间隔一段时间进行持久化,如果持久化之间redis发生故障,会发生数据丢失。所以这种方式更适合数据要求不严谨的时候
Append-only file,将“操作 + 数据”以格式化指令的方式追加到操作日志文件的尾部,在append操作返回后(已经写入到文件或者即将写入),才进行实际的数据变更,“日志文件”保存了历史所有的操作过程;当server需要数据恢复时,可以直接replay此日志文件,即可还原所有的操作过程。AOF相对可靠,它和mysql中bin.log、apache.log、zookeeper中txn-log简直异曲同工。AOF文件内容是字符串,非常容易阅读和解析。
优点:可以保持更高的数据完整性,如果设置追加file的时间是1s,如果redis发生故障,最多会丢失1s的数据;且如果日志写入不完整支持redis-check-aof来进行日志修复;AOF文件没被rewrite之前(文件过大时会对命令进行合并重写),可以删除其中的某些命令(比如误操作的flushall)。
缺点:AOF文件比RDB文件大,且恢复速度慢。
f) redis的数据结构有五种:
i. String字符串
ii. Hash 字典
iii. List 列表
iv. Set 集合
v. Sorted set 有序集合
g) Redis的主从复制(读写分离)
i. 好处:1.避免了redis的单点故障。2构建读写分离框架,满足读多写少的应用场景
ii. 怎样设置读写分离? 在redis.conf中设置slaveof
iii. 复制的过程原理:
- 当从库和主库建立MS关系后,会向主数据库发送SYNC命令;
- 主库接收到SYNC命令后会开始在后台保存快照(RDB持久化过程),并将期间接收到的写命令缓存起来;
- 当快照完成后,主Redis会将快照文件和所有缓存的写命令发送给从Redis;
- 从Redis接收到后,会载入快照文件并且执行收到的缓存的命令;
- 之后,主Redis每当接收到写命令时就会将命令发送从Redis,从而保证数据的一致;
h) 哨兵模式:哨兵的作用就是对redis的系统的运行情况的监控,它是一个独立的进程,主要是用来监控主数据库和从数据库是否正常运行,还有在主数据库出现异常后自动将从数据库转化为主数据库
i) 启动哨兵进程:需要首先创建哨兵的配置文件,再用redis-sentinel/sentinel.conf来启动哨兵进程
j) Redis集群:插槽16383个插槽,平均分配到集群中的每个节点,用crc16算法,来设置计算key值的插槽数,然后写入那个插槽所对应的节点
k) 删除redis节点需要先转移插槽数,然后配置文件
浙公网安备 33010602011771号