Redis相关
一、如何解决数据库高并发
1、缓存式Web应用程序架构
2、增加Redis缓存数据库
3、增加数据库索引
4、页面静态化
5、使用存储过程
6、MySQL主从读写分离
7、分表分库
8、负载均衡集群。负载均衡将是大型网站解决高负荷访问和大量并发请求采用的终极解决办法。
二、Redis并发竞争问题解决方式
1、可以使用独占锁的方式,类似操作系统的mutex 机制,不过实现相对复杂,成本较高。
2、使用乐观锁的方式进行解决(成本较低,非阻塞,性能较高)
本质上是假设不会进行冲突,使用Redis 的命令watch 进行构造条件
三、Redis优缺点
优点
1、读写性能优异
2、支持数据持久化,AOF和RDB两种持久化方式
3、支持主从复制,主机自动将数据同步到从机,可以进行读写分离
4、数据结构丰富:支持string、hash、set、sortedset、list 等数据结构
缺点
1、Redis 不具备自动容错和恢复功能。主机从机的宕机都会导致前端部分读写请求失败,需要等待机器重启或者手动切换前端的IP 才能恢复。
2、主机宕机,宕机前有部分数据未能及时同步到从机,切换IP 后还会引入数据不一致的问题,降低了系统的可用性。
3、Redis 的主从复制采用全量复制。复制过程中主机会fork 出一个子进程对内存做一份快照,并将子进程的内存快照保存为文件发送给从机,这一过程需要确保主机有足够多的空余内存。若快照文件较大,对集群的服务能力会产生较大的影响,而且复制过程是在从机新加入集群或者从机和主机网络断开重连时都会进行,也就是网络波动都会造成主机和从机间的一次全量的数据复制,这对实际的系统运营造成了不小的麻烦。
4、Redis 较难支持在线扩容。在集群容量达到上限时在线扩容会变得很复杂。为避免这一问题,运维人员在系统上线时必须确保有足够的空间,这对资源造成了很大的浪费。
四、Redis使用场景
1、配合关系型数据库做高速缓存
2、缓存高频次访问的数据,降低数据库io
3、分布式架构,做session共享。可以持久化特定数据。
4、利用zset类型可以存储排行榜
5、利用list的自然时间排序存储最新n个数据
五、Redis数据类型
字符串(String)
散列(Hash)
列表(List)
集合(Set)
有序集合(ZSet):跳跃表
redis是单线程的,选用跳跃表的原因仅仅是因为跳跃表的实现相较于红黑树更加简洁