1什么是redis
redis是一个keyvalue存储系统。和Memcached类似,它支持存储的value类型相对更多,包括stri
g字符串、list链表、set集合和zset有序集合。这些数据类型都支持pushpop、addremove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了masterslave主从同步。
2性能怎么样
Redis是一个高性能的keyvalue内存数据库。官方性能测试结果:set操作每秒110000次,get操作每秒81000次。
3可不可以存对象
和Memcached类似,它支持存储的value类型相对更多,包括stri
g字符串、list链表、set集合和zset有序集合。这些数据类型都支持pushpop、addremove及取交集并集和差集及更丰富的操作。
4Redis与memcache的最大区别
Replicatio
(树形)datatypes(Stri
g、Lists、SortedSets、Hashes)persiste
ces
apshot、aof很多开发者都认为Redis不可能比Memcached快,Memcached完全基于内存,而Redis具有持久化保存特性,即使是异步的,Redis也不可能比Memcached快。但是测试结果基本是Redis占绝对优势。一直在思考这个原因,目前想到的原因有这几方面。Libeve
t。和Memcached不同,Redis并没有选择libeve
t。Libeve
t为了迎合通用性造成代码庞大目前Redis代码还不到libeve
t的13及牺牲了在特定平台的不少性能。Redis用libeve
t中两个文件修改实现了自己的epolleve
tloop4。业界不少开发者也建议Redis
f使用另外一个libeve
t高性能替代libev,但是作者还是坚持Redis应该小巧并去依赖的思路。一个印象深刻的细节是编译Redis之前并不需要执行co
figure。CAS问题。CAS是Memcached中比较方便的一种防止竞争修改资源的方法。CAS实现需要为每个cachekey设置一个隐藏的castoke
,cas相当value版本号,每次set会toke
需要递增,因此带来CPU和内存的双重开销,虽然这些开销很小,但是到单机10Gcache以及QPS上万之后这些开销就会给双方相对带来一些细微性能差别5。
5单台Redis的存放数据必须比物理内存小
Redis的数据全部放在内存带来了高速的性能,但是也带来一些不合理之处。比如一个中型网站有100万注册用户,如果这些资料要用Redis来存储,内存的容量必须能够容纳这100万用户。但是业务实际情况是100万用户只有5万活跃用户,1周来访问过1次的也只有15万用户,因此全部100万用户的数据都放在内存有不合r
