百万级运维经验二:Redis和Memcached的选择
- - CSDN博客系统运维推荐文章看到很多人推荐使用Redis代替Memcached,我觉得这两个是不一样的东西,它们的关系应该是共存而不是替代. Memcached是个纯内存型的缓存系统,支持数据类型单一,单个缓存数据有限制,支持分布式,我觉得这是个很理想的缓存系统. Redis是个简单的NOSQL数据库,支持几种简单的数据类型,支持主从复制,支持持久化,可以看作是个内存型数据库.
网站文章通常都会有个阅读数,最简单的方法就是每访问一次就加一,这看起来很简单,update一下就可以了。如果网站访问量很大呢,每天有几十万次的访问呢,一秒钟就要update几次服务器,效率就很低了。而且,数据库update的时候会锁表,还会影响到读操作,看来只能用缓存了。
Memcached是会丢失数据的,不合适;Redis是内存型数据库,可以持久化,就用它了。Redis运行的时候,是把数据都保存在内存中的,读写速度非常的快,而且可以设置持久化策略,一般几分钟保存一次到硬盘就可以了,即使数据丢失,也只是几分钟的阅读数而已,这种损失是可以接受的。还可以使用crontab做个任务,定时把阅读数同步到数据库,其它类似的计数也可以使用这种方式保存。Redis的读写速度是非常快的,所以不用担心在显示列表的时候一个个去读取阅读数的性能问题。
如果要像QQ空间那样,保存哪些用户访问过该篇文章呢,这也很简单,Redis有种数据类型叫集合(Sets),每次登录用户访问时,就把用户ID添加到该文件的集合里就可以了,集合能自动去重,很方便。如果还需要根据访问时间排序呢,比如最新访问的用户排在前面,用有序集合(Sorted Sets)就可以了,把当前时间作为有序集合的分数。