Java操作Redis
前几篇博客我们介绍了 Redis 的概念、数据类型和不同数据类型下的数据操作。在进行数据操作的时候,我们是直接使用命令的,那如何在项目中操作 Redis 的数据呢?今天小编就带大家看一下在 java 下如何操作 Redis 的数据。
准备工作:
新建项目,需要引入 jar 包 jedis-2.1.0.jar commons-pool-1.5.5.jar
Jedis 是 Redis 的 java 客户端,后面的操作都会用到。
小试牛刀:
查询所有 key,相当于数据库命令“keys *”。
// 连接 Redis,6379 端口 Jedis jedis=new Jedis("192.168.22.226",6379); // 查询所有 key 值 Set keys=jedis.keys("*"); Iterator iterator=keys.iterator(); // 遍历 while(iterator.hasNext()){Object obj=iterator.next(); System.out.println("=======[key 值]:"+obj);}
进阶:
Redis 的数据类型分为五种:String,hashes,list,set 和 Sortedsets。这里只以其中的几个为例,简要说明。
1、list
//list 操作 -- 先进后出 jedis.lpush("list001", "001"); jedis.lpush("list001", "002"); jedis.lpush("list001", "003"); System.out.println("key 为 list001 中的元素有:"+jedis.lrange("list001", 0, -1)); System.out.println(jedis.lpop("list001")); System.out.println(jedis.lpop("list001")); System.out.println(jedis.lpop("list001"));
在前一篇博客中,我们演示了 list 操作中模拟队列、栈的进出,这里就不再赘述了。大家可以下面自己测试,很简单的。
2、hash
在 hash 操作中,仍旧是 hset 命令进行添加。
jedis.hset("user001", "book", "Redis"); jedis.hset("user001", "page", "500");
3、set
// 添加元素 jedis.sadd("set02", "one"); jedis.sadd("set02", "two"); jedis.sadd("set02", "three"); jedis.sadd("set02", "four"); // 读取 Set set = jedis.smembers("set02"); // 遍历打印输出 Iterator iterator = set.iterator(); while (iterator.hasNext()) {Object obj = iterator.next(); System.out.println("key 为 set02 中的元素有:"+obj); }
项目实战:
在 ITOO 中,redis 用来实现不同系统间的 Session 共享,Redis 所存储的数据类型也只有 String 一种类型,因此项目中也只对这种类型进行了再一次的封装。
初始化方法
// ip 地址 private String host = "192.168.22.246"; private int port = 6379;// 0 - never expire private int expire = 0; private int timeout = 0; private String password = ""; //Redis池 private static JedisPool jedisPool = null; /** * 初始化方法 */ public void init() { //配置信息 JedisPoolConfig jedisConfig = new JedisPoolConfig(); jedisConfig.setMaxIdle(100); jedisConfig.setMaxTotal(1000); jedisConfig.setMaxWaitMillis(2000); jedisConfig.setTestWhileIdle(true); jedisConfig.setMinEvictableIdleTimeMillis(60000); jedisConfig.setTimeBetweenEvictionRunsMillis(30000); jedisConfig.setNumTestsPerEvictionRun(-1); if (jedisPool == null) { if (password != null && !"".equals(password)) { jedisPool = new JedisPool(jedisConfig, host, port, timeout, password); } else if (timeout != 0) { jedisPool = new JedisPool(jedisConfig, host, port, timeout); } else { jedisPool = new JedisPool(jedisConfig, host, port); } } }</pre><br>
添加方法
/** * set * * @param key * @param value * @return */ public byte[] set(byte[] key, byte[] value) { // 实例化 jedis Jedis jedis = jedisPool.getResource();try { //使用set命令添加 jedis.set(key, value); if (this.expire != 0) { //有效时间 jedis.expire(key, this.expire); } } finally { jedisPool.returnResource(jedis); } return value; }
如果是获取元素,就使用 get 命令,其他的代码都很类似,就不再重复了。
Java 操作 Redis 还是十分好上手的,Jedis 的方法和数据库的命令几乎一模一样,连名字都懒得改的,基本上都是 set、get、lpush、lpop、sadd 之类的,如果这些命令还不熟悉,就翻翻小编前几篇博客吧。不过性能这块还没怎么考虑过,期待下回分享吧……