项目中需要用到redis进行登陆信息的存储,项目框架是Spring MVC,目前已经集成了jedis了。这篇文章主要介绍jedis操作redis的一些基本操作。
注:jedis是redis的java客户端版本,是redis官方推荐的连接方式。
如果你项目的单独的测试可以用下面的方式来连接。
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();
可以一次性设置多个键值对
jedis.mset("user","12345","pwd","654321");
如果某些键的值是数字的情况下,可以通过下面
jedis.incr("user"); //对user字段进行加1操作
简单的业务需求一般来说只存取一个键值对就行,但是稍微复杂一点的可能需要存取一个简单对象。
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)); }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了。
存放数据:
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表示取所有的。
上面的操作如果满足不了需求,可以用上面的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键值 }