以下内容为个人理解所得,如要转载,请标明出处:
像项目中首页的大广告和商品类目这些不需要经常修改
的数据,如果用户每次刷新页面的时候都要去数据库中查询,这样会浪费资
源和增加数据库的压力
。
所以我们想当把这些数据添加到一个缓存
中,用户去访问的时候,先去缓存中查找
,如果命中失败,再去数据库中查询,然后把查询到的数据添加到缓存中。
目前比较主流的缓存技术有Redis
和Memcached
,单纯从缓存命中的角度来说,Memcached要高一些,可Redis和Memcache的差距其实并不大,但Redis提供的功能更加强大一些,读写速度也很快
。所以我们选用了Redis来缓存数据。
redis把数据以key—value的形式缓存到内存中,并提供了多种数据存储类型(String、Hash、list、Set、SortedSet),还自身提供了持久化功能(2种:RDB、AOF)
,还可以把数据备份到磁盘中(redis的SAVE命令用于创建当前 redis数据库的备份),防止redis宕机时的数据丢失。(会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(
主从)同步
)。
1,存储方式不同
memecache 把数据全部存在内存之中,数据不能超过内存大小;
redis有部份存在硬盘上,这样能保证数据的持久性,支持数据的持久化
2,数据支持类型不同
Redis支持的数据类型比memcache多的多
Redis支持的数据类型: String、Hash、list,数组,集合
Memcache仅仅支持简单数据类型 ,复杂数据类型需要应用自己处理
他们都是以key-value的类型存储数据
3.为什么redis比 Memcached要快?
Memcached 完全基于内存,而Redis
具有持久化保存特性,即使是异步的,Redis
也不可能比Memcached
快。
Memcached
底层用的是Libevent
,Redis并没有选择Libevent
。Libevent
为了迎合通用性,使得他的底层代码庞大而Redis的底层代码还不到libevent的1/3 ,
但是也牺牲了redis通用性,现在在redis的官网上,他说明了redis只能在Liuse上使用。
CAS
问题。CAS
是Memcached
中比较方便的一种防止竞争修改资源的方法。CAS
实现需要为每个cache key设置一个隐藏的cas token
,
cas
相当value
版本号,每次set
会token
需要递增,因此带来CPU和内存的双重开销,虽然这些开销很小,