Redis缓存
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
- $ make
$ 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 $ make
make命令执行完成后,会在当前目录下生成本个可执行文件,分别是redis-server、redis-cli、redis-benchmark、redis-stat,它们的作用如下:
redis-server:Redis服务器的daemon启动程序
redis-cli:Redis命令行操作工具。当然,你也可以用telnet根据其纯文本协议来操作
redis-benchmark:Redis性能测试工具,测试Redis在你的系统及你的配置下的读写性能
redis-stat:Redis状态检测工具,可以检测Redis当前状态参数及延迟状况。
服务端启动:
- src/redis-server
src/redis-server
客户端连接:
- src/redis-cli
src/redis-cli
例子:
- redis> set name helloword!
- OK
- redis> get name
- “helloword!”
redis> set name helloword! OK redis> get name "helloword!"
更多命令行使用可以借助help
客户端编码方式:
首先引入二方包
- <dependency>
- <groupId>redis.clients</groupId>
- <artifactId>jedis</artifactId>
- <version>2.2.1</version>
- </dependency>
<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);
- }
- }
- }
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]
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值不限长度,可以适用一些模糊查询或匹配场景。