• redis使用心得


    原创文章转载请注明出处:@协思, http://zeeman.cnblogs.com
     
    redis是继memcached之后兴起的内存数据库,作者非常崇尚简洁高效,力求以最简单的方式最高效的解决问题,所谓大道至简。同时作者也很勤奋,经常尝试不同解决问题的方式来优化。
     
    redis支持丰富的数据的数据结构,它们在特定场景下都有自己的用武之地。比如hash: 能提供同一类资源下所有健值的查询, ServiceStack的redis client就是基于此来封装Entity实现透明读写操作的。
     
    为了支持不同数据结构的操作,提供了丰富的命令,实际上这就是和redis进行交互的方式。我在项目中用到redis保存json结构的数据,用命令查看并不方便,于是基于node.js提供rest api查询,在chrome浏览器中查看json方便了不少,后面有时间会整理开源到github。
     
    redis的cluster模块还没有合并到稳定版本中,因此无法做到数据切片。Master/Slave也只能解决HA的问题,目前还是单机使用的场景比较多,这方面还比较弱。
     
    redis曾经在早期版本中提供了使用磁盘来虚拟内存功能,但在新版本中已经取消,作者认为redis定位是内存数据库,在内存中操作数据是最高效的。因此,在产线部署redis要求内存足够,考虑fork进程持久化的问题,建议至少为缓存数据的两倍值。在实践中,我们发现内存紧张可能引发redis异常退出,所以没内存就不要玩redis。
     
    redis提供了AOF和Snapshot两种方式来持久化数据,这两种持久化都不会影响缓存使用。前者是commit log方式,对数据的保障性最高,缺点是要准备足够的磁盘空间。另外要注意在特别严格的场景下,要关闭操作系统写缓存(appendfsync),否则高并发下仍然有丢失数据的风险。Snapshot是通常的做法,也是默认的方式,通过一定的策略来触发,注意是Snapshot是全量写入磁盘的。
     
    redis也实现了事务性的两阶段提交,事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。事务中的命令要么全部被执行,要么全部都不执行。
     
    值得一提的是,在电子商务网站中,前端负载均衡设备通常会以FAQ的方式询问后端服务是否活着,对于redis的检查,可以通过ping命令完成。
  • 相关阅读:
    3、Find and run the whalesay image
    1、docker初涉
    Java之ThreadLocal原理分析
    Java之Synchronized和ReentrantLock锁机制的比较
    Java之动态代理的实现及原理
    Java之atomic包的原理及分析
    深入理解Java内存模型-volatile
    Java WeakReference
    JavaScript 事件的冒泡,委派
    JavaScript Date删除添加员工信息练习
  • 原文地址:https://www.cnblogs.com/zeeman/p/3970030.html
Copyright © 2020-2023  润新知