Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。
redis支持各种不同方式的排序。
与memcached一样,为了保证效率,数据都是缓存在内存中。不同的是redis会周期性把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
关于性能方面,redis也有一个不错的表现:
官方的bench-mark数据:测试完成了50个并发执行100000个请求;设置和获取的值是一个256字节字符串;Linux box是运行Linux 2.6
结果:写的速度是110000次/s,读的速度是81000次/s 。
安装步骤:
$ wget http://redis.googlecode.com/files/redis-2.4.7.tar.gz $ tar zxvf redis-2.4.7.tar.gz $ cd redis-2.4.7 $ makemake命令执行完成后,会在当前目录下生成本个可执行文件
服务端启动:
src/redis-server客户端连接:
src/redis-cli例子:
redis> set name helloword! OK redis> get name "helloword!"
客户端编码方式:
首先引入二方包
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.2.1</version> </dependency>代码示例:
package redis; import java.util.List; import redis.clients.jedis.Jedis; /** * Redis测试类 * * @author onlyone */ public class RedisTest { /** * @param args */ public static void main(String[] args) { Jedis jedis = new Jedis("192.168.2.128", 6379, 0); String value; // 1. k-v存储 jedis.set("name", "helloword"); value = jedis.get("name"); System.out.println("1: " + value); // 2. 将新增的值添加到旧值后面 jedis.append("name", " append new info,"); value = jedis.get("name"); System.out.println("2: " + value); // 3. 删除key对应的记录 // jedis.del("name"); // value = jedis.get("name"); // System.out.println("3: " + value); // 4. 批量设值 jedis.mset("name1", "minxr", "name2", "aaa"); System.out.println("4: " + jedis.mget("name1", "name2")); // 5. 清空数据,所有的 // System.out.println(jedis.flushDB()); // 6. 截取value的值 System.out.println("6: " + jedis.getrange("name", 1, 3)); // 7.按通配符模糊查找符合条件的key System.out.println("7: " + jedis.keys("*na*")); // 8. 数据库大小 System.out.println("8: " + jedis.dbSize()); // 9. k-v存储,v表示的List(队列形式) jedis.del("messages"); jedis.rpush("messages", "how"); jedis.rpush("messages", "are"); jedis.rpush("messages", "you"); // 返回messages对应的集合长度 System.out.println("9: " + jedis.llen("messages")); // 取数据,第一个是key,第二个是起始位置,第三个是结束位置,jedis.llen获取长度 -1表示取得所有 List<String> values = jedis.lrange("messages", 0, 1); System.out.println("9: " + values); // 10. k-v存储,v表示的List(堆栈形式) jedis.del("desc"); jedis.lpush("desc", "1"); jedis.lpush("desc", "2"); jedis.lpush("desc", "3"); jedis.lpush("desc", "4"); // 数组长度 System.out.println("10: " + jedis.llen("desc")); System.out.println("10: " + jedis.lrange("desc", 0, -1)); // 11. 取出库中所有的key for (String a : jedis.keys("*")) { System.out.println("======================"); System.out.println(a); } } }
1: helloword 2: helloword append new info, 4: [minxr, aaa] 6: ell 7: [name1, name2, name] 8: 3 9: 3 9: [how, are] 10: 4 10: [4, 3, 2, 1]
API文档:http://tool.oschina.net/apidocs/apidoc?api=jedis-2.1.0
注:redis存储中的key值不限长度,可以适用一些模糊查询或匹配场景。
原文:http://blog.csdn.net/itomge/article/details/21191395