Jedis 是一款java操作redis数据库的工具.

1. 基本使用

  1. //1. 获取连接
  2. Jedis jedis = new Jedis("localhost",6379);
  3. //2. 操作
  4. jedis.set("username","zhangsan");
  5. //3. 关闭连接
  6. jedis.close();

2. Jedis操作各种redis中的数据结构

1) 字符串类型 string

  1. //1. 获取连接
  2. Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
  3. //2. 操作
  4. //存储
  5. jedis.set("username","zhangsan");
  6. //获取
  7. String username = jedis.get("username");
  8. System.out.println(username);
  9. //可以使用setex()方法存储可以指定过期时间的 key value
  10. jedis.setex("activecode",20,"hehe");//将activecode:hehe键值对存入redis,并且20秒后自动删除该键值对
  11. //3. 关闭连接
  12. jedis.close();

2) 哈希类型 hash : map格式

  1. //1. 获取连接
  2. Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
  3. //2. 操作
  4. // 存储hash
  5. jedis.hset("user","name","lisi");
  6. jedis.hset("user","age","23");
  7. jedis.hset("user","gender","female");
  8. // 获取hash
  9. String name = jedis.hget("user", "name");
  10. System.out.println(name);
  11. // 获取hash的所有map中的数据
  12. Map<String, String> user = jedis.hgetAll("user");
  13. // keyset
  14. Set<String> keySet = user.keySet();
  15. for (String key : keySet) {
  16. //获取value
  17. String value = user.get(key);
  18. System.out.println(key + ":" + value);
  19. }
  20. //3. 关闭连接
  21. jedis.close();

3) 列表类型 list : linkedlist格式。支持重复元素
lpush / rpush
lpop / rpop
lrange start end : 范围获取

  1. //1. 获取连接
  2. Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
  3. //2. 操作
  4. // list 存储
  5. jedis.lpush("mylist","a","b","c");//从左边存
  6. jedis.rpush("mylist","a","b","c");//从右边存
  7. // list 范围获取
  8. List<String> mylist = jedis.lrange("mylist", 0, -1);
  9. System.out.println(mylist);
  10. // list 弹出
  11. String element1 = jedis.lpop("mylist");//c
  12. System.out.println(element1);
  13. String element2 = jedis.rpop("mylist");//c
  14. System.out.println(element2);
  15. // list 范围获取
  16. List<String> mylist2 = jedis.lrange("mylist", 0, -1);
  17. System.out.println(mylist2);
  18. //3. 关闭连接
  19. jedis.close();

4) 集合类型 set: 不允许重复元素
sadd
smembers:获取所有元素

  1. //1. 获取连接
  2. Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
  3. //2. 操作
  4. // set 存储
  5. jedis.sadd("myset","java","php","c++");
  6. // set 获取
  7. Set<String> myset = jedis.smembers("myset");
  8. System.out.println(myset);
  9. //3. 关闭连接
  10. jedis.close();

5) 有序集合类型 sortedset:不允许重复元素,且元素有顺序
zadd
zrange

  1. //1. 获取连接
  2. Jedis jedis = new Jedis();//如果使用空参构造,默认值 "localhost",6379端口
  3. //2. 操作
  4. // sortedset 存储
  5. jedis.zadd("mysortedset",3,"亚瑟");
  6. jedis.zadd("mysortedset",30,"后裔");
  7. jedis.zadd("mysortedset",55,"孙悟空");
  8. // sortedset 获取
  9. Set<String> mysortedset = jedis.zrange("mysortedset", 0, -1);
  10. System.out.println(mysortedset);
  11. //3. 关闭连接
  12. jedis.close();

3. Jedis 连接池

  1. 创建JedisPool连接池对象
  2. 调用方法 getResource()方法获取Jedis连接
    ```java //0.创建一个配置对象 JedisPoolConfig config = new JedisPoolConfig(); config.setMaxTotal(50); config.setMaxIdle(10);

//1.创建Jedis连接池对象 JedisPool jedisPool = new JedisPool(config,”localhost”,6379);

//2.获取连接 Jedis jedis = jedisPool.getResource();

//3. 使用 jedis.set(“hehe”,”heihei”);

  1. <a name="cjKjo"></a>
  2. ## 4. 写一个Jedis 工具类
  3. ```java
  4. public class JedisPoolUtils {
  5. private static JedisPool jedisPool;
  6. static{
  7. //读取配置文件
  8. InputStream is = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties");
  9. //创建Properties对象
  10. Properties pro = new Properties();
  11. //关联文件
  12. try {
  13. pro.load(is);
  14. } catch (IOException e) {
  15. e.printStackTrace();
  16. }
  17. //获取数据,设置到JedisPoolConfig中
  18. JedisPoolConfig config = new JedisPoolConfig();
  19. config.setMaxTotal(Integer.parseInt(pro.getProperty("maxTotal")));
  20. config.setMaxIdle(Integer.parseInt(pro.getProperty("maxIdle")));
  21. //初始化JedisPool
  22. jedisPool = new JedisPool(config,pro.getProperty("host"),Integer.parseInt(pro.getProperty("port")));
  23. }
  24. /**
  25. * 获取连接方法
  26. */
  27. public static Jedis getJedis(){
  28. return jedisPool.getResource();
  29. }
  30. }

5. Jedis 实例:

  • 注意:使用redis缓存一些不经常发生变化的数据。
    数据库的数据一旦发生改变,则需要更新缓存。
    数据库的表执行 增删改的相关操作,需要将redis缓存数据情况,再次存入
    在service对应的增删改方法中,将redis数据删除。 ```java /*
    • 使用redis缓存 */

@Override public String findAllJson() { //1.先从redis中查询数据 //1.1获取redis客户端连接 Jedis jedis = JedisPoolUtils.getJedis(); String province_json = jedis.get(“province”);

  1. //2判断 province_json 数据是否为null
  2. if(province_json == null || province_json.length() == 0){
  3. //redis中没有数据
  4. System.out.println("redis中没数据,查询数据库...");
  5. //2.1从数据中查询
  6. List<Province> ps = dao.findAll();
  7. //2.2将list序列化为json
  8. ObjectMapper mapper = new ObjectMapper();
  9. try {
  10. province_json = mapper.writeValueAsString(ps);
  11. } catch (JsonProcessingException e) {
  12. e.printStackTrace();
  13. }
  14. //2.3 将json数据存入redis
  15. jedis.set("province",province_json);
  16. //归还连接
  17. jedis.close();
  18. }else{
  19. System.out.println("redis中有数据,查询缓存...");
  20. }
  21. return province_json;

} ```