redis (remote dictionary server)
redis特点:
1)支持内存缓存,相当于memcached;
2)持久化,相当于memcachedb,ttserver;
3)数据类型更丰富;
4)支持集群,分布式;
5)key-value键值类型存储系统;
6)支持数据可靠存储及落地;
7)单进程单线程高性能服务器;(可实现多实例)
一个实例20-30G内存;
8)crash safe & recovery slow;
9)单机qps 可以达到10w
10)适合小数据量高速读写访问;
11)支持异机主从复制;
12)支持publish/subscribe(发布/订阅),通知,key过期等等特性;
redis支持存储的value类型相对更多,包括string(字符串)、list(列表)、set(集合)、和zset(有序集合)和hash等; 与memcachedb一样,为了保证效率,数据都是缓存在内存中,区别是redis会会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步;
这些数据类型支持push/pop、add/remove及取交集、并集和差集及更丰富的操作,而且这些操作都是原子性的,不会出现锁的情况;
缺点:
1)代码从读取memcached更改为读取redis;
2)不同命令延迟差别极大;
3)内存管理开销大(低于物理内存的3/5)
4)buffer io 造成系统oom(内存溢出)
redis持久化
1)snapshot(快照)一次性将内存中的数据写入到磁盘,需要key的更新(输入触发类型);
2)aof(binlog日志方式),记录每次更新的日志,不会导致数据的丢失;(不用于主从同步)仅仅用于保存数据;
redis最佳应用场景
1.redis全部数据在memory
2.最佳对memcached的替代品;
3.数据比较重要,对数据一致性有一定要求的业务;
4.当需要除key/value之外的更多数据类型支持时,使用redis更合适;
5.需要提供主从同步以及负载均衡分布式应用场景(redis主从同步);
redis的生产经验教训
1.要进行master-slave主从同步配置,在出现服务故障时可以切换;
2.在master禁用数据持久化,只需在slave上配置数据持久化;
3.物理内存+虚拟内存不足,这个时候dump一直死着,时间久了机器挂掉
4.当redis物理内存使用超过内存总容量的3/5时就会开始比较危险了,就开始做swap,内存碎片大!
5.当达到最大内存时,会清空带有过期时间的key,即使key未到过期时间;
6.redis与db同步写的问题,先写db,后写redis,因为写内存基本上没有问题;
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。