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 之类的,如果这些命令还不熟悉,就翻翻小编前几篇博客吧。不过性能这块还没怎么考虑过,期待下回分享吧……