扫码关注公众号
Redis是什么?
Redis是一个key-value存储系统,它支持存储的value类型相对更多,包括string、list、set、zset(sortedset--有序集合)和hash。这些数据结构都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,Redis支持各种不同方式的排序。为了保证效率,数据都是缓存在内存中,Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
Redis为什么是单线程的?
1.代码更清晰,处理逻辑更简单;2.不用考虑各种锁的问题,不存在加锁和释放锁的操作,没有因为可能出现死锁而导致的性能问题;3.不存在多线程切换而消耗CPU;4.无法发挥多核CPU的优势,但可以采用多开几个Redis实例来完善;
使用 Redis 有哪些好处?
1、速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O1)2、支持丰富数据类型,支持string,list,set,Zset,hash等 3、支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行4、丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除
Redis 常见性能问题和解决方案
1、Master最好不要写内存快照,如果Master写内存快照,save命令调度rdbSave函数,会阻塞主线程的工作,当快照比较大时对性能影响是非常大的,会间断性暂停服务2、如果数据比较重要,某个Slave开启AOF备份数据,策略设置为每秒同步一次。3、为了主从复制的速度和连接的稳定性,Master和Slave最好在同一个局域网内。4、尽量避免在压力很大的主库上增加从库。5、主从复制不要用图状结构,用单向链表结构更为稳定,即:Master<-Slave1<-Slave2<-Slave3…这样的结构方便解决单点故障问题,实现Slave对Master的替换。如果Master挂了,可以立刻启用Slave1做Master,其他不变。
redis 过期键的删除策略?
1、定时删除:在设置键的过期时间的同时,创建一个定时器timer.让定时器在键的过期时间来临时,立即执行对键的删除操作。2、惰性删除:放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键;如果没有过期,就返回该键。3、定期删除:每隔一段时间程序就对数据库进行一次检查,删除里面的过期键。至于要删除多少过期键,以及要检查多少个数据库,则由算法决定。