|  | 
 
| Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持. 它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets)和 有序集合(sorted sets)等类型。
 Redis支持诸如列表、集合或有序集合的交集、并集、差集等高级原子操作.
 
 持久化
 
 通常,Redis将数据存储于内存中,或被配置为使用虚拟内存。[3]通过两种方式可以实现数据持久化:使用快照的方式,将内存中的数据不断写入磁盘;或使用类似MySQL的日志方式,记录每次更新的日志。前者性能较高,但是可能会引起一定程度的数据丢失;后者相反。
 
 [编辑]主从同步
 
 Redis支持将数据同步到多台从库上,这种特性对提高读取性能非常有益。
 
 [编辑]性能
 
 相比需要依赖磁盘记录每个更新的数据库,基于内存的特性无疑给Redis带来了非常优秀的性能。读写操作之间没有显著的性能差异,如果Redis将数据只存储于内存中。
 
 Redis的优点
 
 
 redis命令在线练习
 性能极高 – Redis能支持超过 100K+ 每秒的读写频率。
丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
原子(事务性) – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。
丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。(你可以将数据推到某个信息管道中,然后其它人可以通过订阅这些管道来获取推送过来的信息)
持久化: 1. 数据快照的原理是将整个Redis中存的所有数据遍历一遍存到一个扩展名为rdb的数据文件中。通过SAVE(BGSAVE)命令可以调用这个过程。2.Redis还支持一种追加式的操作日志记录,叫append only file,其日志文件以aof结局,我们一般各为aof文件。
 http://try.redis.io/
 http://redis.cn/
 redis命令操作类可以参考:Redis系统性介绍
 http://blog.nosqlfan.com/html/3139.html?ref=rediszt
 MEMCACHE与REDIS的对比:
 1. 没有必要过多的关心性能,因为二者的性能都已经足够高了。由于Redis只使用单核,而Memcached可以使用多核,所以在比较上,平均每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis最近也在存储大数据的性能上进行优化,但是比起Memcached,还是稍有逊色。说了这么多,结论是,无论你使用哪一个,每秒处理请求的次数都不会成为瓶颈。(比如瓶颈可能会在网卡)
 2. 如果要说内存使用效率,使用简单的key-value存储的话,Memcached的内存利用率更高,而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcached。当然,这和你的应用场景和数据特性有关。
 3. 如果你对数据持久化和数据同步有所要求,那么推荐你选择Redis,因为这两个特性Memcached都不具备。即使你只是希望在升级或者重启系统后缓存数据不会丢失,选择Redis也是明智的
 4. 当然,最后还得说到你的具体应用需求。Redis相比Memcached来说,拥有更多的数据结构和并支持更丰富的数据操作,通常在Memcached里,你需要将数据拿到客户端来进行类似的修改再set回去。这大大增加了网络IO的次数和数据体积。在Redis中,这些复杂的操作通常和一般的GET/SET一样高效。所以,如果你需要缓存能够支持更复杂的结构和操作,那么Redis会是不错的选择。
 1、查看keys
 
 redis 127.0.0.1:6379> keys *
 1) "serverMinutes.1.1336284900"
 2) "serverMinutes.1.1340192100"
 3) "serverDay.1.20120620"
 4) "server.1.lastState"
 5) "serverMinutes.1.1340192400"
 2、列表操作
 
 Jedis jedis = getJedis();
 jedis.rpush(cacheKey,"list_data1");
 jedis.rpush(cacheKey,"list_data2");
 jedis.rpush(cacheKey,"list_data3");
 jedis.expire(cacheKey, expireSeconds);
 //get data
 List<String> list =jedis.lrange(cacheKey, 0, -1); //start, end
 命令模式查看:
 
 redis 127.0.0.1:6379> lrange serverMinutes.1.1340192100 0 -1
 1) "1.266667"
 2) "0.9641184807561425"
 3) "3.5300000000000002"
 4) "0.33855871944968086"
 5) "0.0"
 3. MAP操作
 
 Jedis jedis = getJedis();
 jedis.hset(cacheKey, "lastRecv", "1340192603");
 jedis.hincrBy(cacheKey, "packetNum", 1);
 Map<String, String>  map = jedis.hgetAll(key);
 String fieldData = jedis.hget(cacheKey, field);
 命令模式查看:
 
 redis 127.0.0.1:6379> hgetall server.1.lastState
 1) "lastRecv"
 2) "1340192603"
 3) "lastSend"
 4) "1340192500"
 5) "lastRRD"
 6) "1340192400"
 7) "lastDiskReadIoNum"
 8) "3000"
 | 
 | 
| 
 |