0.前言

项目中需要用到redis进行登陆信息的存储,项目框架是Spring MVC,目前已经集成了jedis了。这篇文章主要介绍jedis操作redis的一些基本操作。

注:jedis是redis的java客户端版本,是redis官方推荐的连接方式。

1.jedis的连接

如果你项目的单独的测试可以用下面的方式来连接。

 Jedis  redis = new Jedis ("127.0.0.1",6379);//连接redis     
 redis.auth("123456");//验证密码     

我的项目因为用下面的配置文件集成了:

  <bean id="jedisPool" class="redis.clients.jedis.JedisPool">
        <constructor-arg name="poolConfig" ref="genericObjectPoolConfig"/>
        <constructor-arg name="host" value="${redis.host}"/>
        <constructor-arg name="port" value="${redis.port}"/>
        <constructor-arg name="timeout" value="${redis.timeout}"/>
        <constructor-arg name="password" value="${redis.password}"/>
    </bean>

所以在使用的时候只要导入

  @Autowired
    private JedisPool jedisPool;

然后在使用的地方使用下面代码就可以操作jedis了

 Jedis jedis = jedisPool.getResource();
2.jedis的操作字符串String
        Jedis jedis = jedisPool.getResource();
        jedis.set("user","admin");
        String name= jedis.get("user");

可以一次性设置多个键值对

       jedis.mset("user","12345","pwd","654321");

如果某些键的值是数字的情况下,可以通过下面

       jedis.incr("user"); //对user字段进行加1操作
3.jedis操作Map

简单的业务需求一般来说只存取一个键值对就行,但是稍微复杂一点的可能需要存取一个简单对象。

  Jedis jedis = jedisPool.getResource();

        Map<String, String> map = new HashMap<String, String>();
        map.put("name", "zhangsan");
        map.put("age", "18");
        map.put("tel", "13112345678");

可以通过下面的代码进行取的操作:

Jedis jedis = jedisPool.getResource();

        Map<String, String> map = new HashMap<String, String>();
        map.put("name", "zhangsan");
        map.put("age", "18");
        map.put("tel", "13112345678");
        jedis.hmset("user",map);
        List<String> rsmap1 = jedis.hmget("user", "name");
        List<String> rsmap2 = jedis.hmget("user", "name","age","tel");

rsmap1 是取的user字段中的name的值。

rsmap2 是取的user字段中name、age、tel的值。

如下图,取出的数据是ArrayList类型

除此之外,还有其他操作:

    jedis.hdel("user","name"); //删除某个键值对
        jedis.hlen("user"); //返回key为user中的存放的所有值的个数
        jedis.exists("user"); //是否存在key为user的记录
        jedis.hkeys("user");//返回map对象中所有的key
        jedis.hvals("user");// 返回mapd对象中所有的value
        //循环输出
        Iterator<String> iter=jedis.hkeys("user").iterator();
        while (iter.hasNext()){
            String key = iter.next();
            System.out.println(key+":"+jedis.hmget("user",key)); 
        }
4.jedis操作JSONobject
        JSONObject object = new JSONObject();
        object.put("name", "zhangsan");
        object.put("age", "18");
        object.put("tel", "13112345678");
        jedis.set("user",object.toString());

可以看到,存的时候以json的形式存到了redis中了。

取的时候用JSON.parseObject就行,像下面这样:

      JSONObject object = new JSONObject();
        object.put("name", "zhangsan");
        object.put("age", "18");
        object.put("tel", "13112345678");
        jedis.set("user",object.toString());   //把object转换成string存进去。
        JSONObject object1 = JSON.parseObject(jedis.get("user"));  //取出数据,并用JSON工具转换成对象

可以看到,这样返回的可以操作object了。

5.jedis操作List

存放数据:

 Jedis jedis = jedisPool.getResource();

        //存放4条数据
        jedis.lpush("user","admin");
        jedis.lpush("user","test");
        jedis.lpush("age","18");
        jedis.lpush("tel","13112345678");

取数据:

   jedis.lrange("user",0,-1);

第一个参数是key,第二个参数是起始位置,第三个参数是结束位置,-1表示取所有的。

7.jedis操作JSONArray

上面的操作如果满足不了需求,可以用上面的JSONObject和JSONArray配合使用。

 Jedis jedis = jedisPool.getResource();
        JSONArray arr = new JSONArray();
        JSONObject object1 = new JSONObject();
        JSONObject object2 = new JSONObject();
        object1.put("user","admin");
        object1.put("pwd","123456");
        arr.add(object1);
        object2.put("user","test");
        object2.put("pwd","123456");
        arr.add(object2);
        jedis.set("users",arr.toJSONString());

这个创建后就像下面这样。

取数据的话可以通过for循环取数据进行判断。

 Jedis jedis = jedisPool.getResource();
        JSONArray arr = new JSONArray();
        JSONObject object1 = new JSONObject();
        JSONObject object2 = new JSONObject();
        object1.put("user","admin");
        object1.put("pwd","123456");
        arr.add(object1);
        object2.put("user","test");
        object2.put("pwd","123456");
        arr.add(object2);
        jedis.set("users",arr.toJSONString());

        //取出
        String result = jedis.get("users"); //取出
        JSONArray res = JSONArray.parseArray(result);

        for(int i=0;i<res.size();i++){
            JSONObject obj = (JSONObject) res.get(i);
            obj.get("user"); //读取某个对象 user键值
            obj.get("pwd"); //读取某个对象的 pwd键值
        }