Jedis的简单使用

x33g5p2x  于2022-07-20 转载在 其他  
字(7.8k)|赞(0)|评价(0)|浏览(623)

创建连接

  1. public static Jedis jedis = null;
  2. static {
  3. // 地址 和 端口
  4. jedis = new Jedis("127.0.0.1", 6379);
  5. // jedis.auth("helloworld"); // 若你的redis设置了密码,则可以执行该方法,开启密码验证
  6. }

操作key

  1. /**
  2. * 操作key
  3. */
  4. @Test
  5. void keyTest() {
  6. System.out.println(jedis.flushDB());// 清空数据
  7. System.out.println(jedis.echo("hello"));
  8. // 判断key否存在
  9. System.out.println(jedis.exists("foo"));
  10. jedis.set("key", "values");
  11. jedis.set("key2", "values");
  12. System.out.println(jedis.exists("key"));// 判断是否存在
  13. // 如果数据库没有任何key,返回nil,否则返回数据库中一个随机的key。
  14. String randomKey = jedis.randomKey();
  15. System.out.println("randomKey: " + randomKey);
  16. // 设置60秒后该key过期
  17. jedis.expire("key", 60);
  18. // key有效毫秒数
  19. System.out.println(jedis.pttl("key"));
  20. // 移除key的过期时间
  21. jedis.persist("key");
  22. // 获取key的类型, "string", "list", "set". "none" none表示key不存在
  23. System.out.println("type: " + jedis.type("key"));
  24. // 导出key的值
  25. byte[] bytes = jedis.dump("key");
  26. System.out.println(new String(bytes));
  27. // 将key重命名
  28. jedis.renamenx("key", "keytest");
  29. System.out.println("key是否存在: " + jedis.exists("key"));// 判断是否存在
  30. System.out.println("keytest是否存在: " + jedis.exists("keytest"));// 判断是否存在
  31. // 查询匹配的key
  32. // KEYS * 匹配数据库中所有 key 。
  33. // KEYS h?llo 匹配 hello , hallo 和 hxllo 等。
  34. // KEYS h*llo 匹配 hllo 和 heeeeello 等。
  35. // KEYS h[ae]llo 匹配 hello 和 hallo ,但不匹配 hillo 。
  36. // 特殊符号用 \ 隔开。
  37. Set<String> set = jedis.keys("k*");
  38. System.out.println(set);
  39. // 删除key
  40. jedis.del("key");
  41. System.out.println(jedis.exists("key"));
  42. }

输出结果:

操作string

  1. /**
  2. * 操作String字符串
  3. */
  4. @Test
  5. void stringTest() {
  6. // 清空库
  7. jedis.flushDB();
  8. // 设置 字符串
  9. jedis.set("hello", "hello");
  10. System.out.println(jedis.get("hello"));
  11. // 为某个value拼接字符串
  12. jedis.append("hello", " world");
  13. // 新增覆盖旧值
  14. jedis.set("hello","redis, hello world!");
  15. System.out.println(jedis.get("hello"));
  16. // 设置过期时间 | expire:失效
  17. // arg1:key arg2:过期时间 arg3:对应value值
  18. jedis.setex("expireKey", 10, "一会儿就失效了");
  19. // multiple: 多次的
  20. // 多次设置
  21. jedis.mset("mkey1","hhh", "mkey2","hahaha");
  22. System.out.println(jedis.get("mkey1") + " " + jedis.get("mkey2"));
  23. // 多次获取
  24. List<String> mget = jedis.mget("mkey1", "mkey2");
  25. System.out.println(mget);
  26. // 批量删除
  27. jedis.del("mkey1", "mkey2");
  28. System.out.println(jedis.exists("mkey1"));
  29. System.out.println(jedis.exists("mkey2"));
  30. }

输出结果:

操作list

  1. /**
  2. * 对列表类型List的操作
  3. */
  4. @Test
  5. void listTest() {
  6. // 清空库
  7. jedis.flushDB();
  8. // 设置链表list
  9. String key = "myList";
  10. // rpush: 从添加元素到列表 右侧 (r 表示 right)
  11. jedis.rpush(key, "1");
  12. jedis.rpush(key, "2");
  13. // lpush: 从添加元素到列表 左侧 (l 表示 left)
  14. jedis.lpush(key, "0");
  15. jedis.lpush(key, "-8");
  16. // 同时 rpush 和 lpush 都可以插入多个元素
  17. jedis.rpush(key, "3","4","5");
  18. jedis.lpush(key,"a","b","c");
  19. // 获取链表的长度
  20. Long length = jedis.llen(key);
  21. System.out.println("列表的长度为:"+length);
  22. // 打印队列,从索引0开始,到倒数第1个(全部元素)
  23. List<String> list = jedis.lrange(key, 0, -1);
  24. System.out.println(list);
  25. // 获取索引为index的元素
  26. String index_1_value = jedis.lindex(key, 1);
  27. System.out.println(index_1_value);
  28. // 设置索引index位置的元素, 新值覆盖旧值
  29. jedis.lset(key, 1, "999");
  30. System.out.println(jedis.lrange(key, 0, -1));
  31. // 从左边弹出一个元素
  32. String lpop = jedis.lpop(key);
  33. System.out.println(lpop);
  34. System.out.println(jedis.lrange(key, 0, -1));
  35. // 从右边弹出一个元素
  36. String rpop = jedis.rpop(key);
  37. System.out.println(rpop);
  38. System.out.println(jedis.lrange(key, 0, -1));
  39. // 删除值为xxx的元素
  40. // count > 0: 从头往尾移除值为 value 的元素,count为移除的个数。
  41. // count < 0: 从尾往头移除值为 value 的元素,count为移除的个数。
  42. // count = 0: 移除所有值为 value 的元素。
  43. jedis.lrem(key, 1, "a");
  44. // 即最右边的那个元素也会被包含在内。 如果start比list的尾部下标大的时候,会返回一个空列表。
  45. // 如果stop比list的实际尾部大的时候,Redis会当它是最后一个元素的下标。
  46. System.out.println(jedis.lrange(key, 0, 2));
  47. System.out.println("all elements: " + jedis.lrange(key, 0, -1));
  48. // 删除区间以外的元素
  49. System.out.println(jedis.ltrim(key, 0, 2));
  50. System.out.println("all elements: " + jedis.lrange(key, 0, -1));
  51. }

输出结果:

操作set

  1. @Test
  2. void setTest() {
  3. // 清空库
  4. jedis.flushDB();
  5. String key1 = "set1";
  6. String key2 = "set2";
  7. // 集合添加元素
  8. jedis.sadd(key1, "aaa", "bbb", "ccc");
  9. jedis.sadd(key2, "bbb", "ccc", "ddd");
  10. // smembers方法: 返回set集合的成员属性,返回类型为 Set<String>。 s表示set,members 表示成员复数
  11. Set<String> smembers1 = jedis.smembers(key1);
  12. Set<String> smembers2 = jedis.smembers(key2);
  13. System.out.println(smembers1);
  14. System.out.println(smembers2);
  15. // 获取set集合的元素个数
  16. Long scard = jedis.scard(key1);
  17. System.out.println("key1集合的元素个数为:"+scard);
  18. // 获得两个集合的交集,并存储在一个关键的结果集
  19. jedis.sinterstore("destination", key1, key2);
  20. System.out.println(jedis.smembers("destination"));
  21. // 获得两个集合的并集,并存储在一个关键的结果集
  22. jedis.sunionstore("destination", key1, key2);
  23. System.out.println(jedis.smembers("destination"));
  24. // 在key1集合中,key2集合没有的元素,并存储在一个关键的结果集
  25. jedis.sdiffstore("destination", key1, key2);
  26. System.out.println(jedis.smembers("destination"));
  27. // 判断某个元素是否是一个集合的成员
  28. System.out.println(jedis.sismember(key1, "aaa"));
  29. // 删除并获取一个集合里面的元素
  30. System.out.println(jedis.spop(key1));
  31. // 从集合里删除一个或多个元素
  32. jedis.srem(key2, "ccc", "ddd");
  33. System.out.println(jedis.smembers(key2));
  34. }

输出结果:

操作zset

  1. /**
  2. * 对sorted set的操作(有序的集合)
  3. */
  4. @Test
  5. void zsetTest() {
  6. // 清空库
  7. jedis.flushDB();
  8. String key = "sortedSet";
  9. // 添加元素,方式1:
  10. // arg1:key arg2:分数(越小越靠前) arg3:value
  11. jedis.zadd(key,6.0, "aaaa");
  12. // 添加元素,方式2:添加一个map集合
  13. // 2.1 首先创建一个map集合, key为zset中的值, value为对应的分数
  14. HashMap<String, Double> zsetMap = new HashMap<>();
  15. zsetMap.put("bbbb", 8.0);
  16. zsetMap.put("cccc", -1.0);
  17. zsetMap.put("dddd", 1.0);
  18. jedis.zadd(key, zsetMap);
  19. // 获取一个排序的集合中的成员数量
  20. System.out.println(jedis.zcard(key));
  21. // 返回的成员在指定范围内的有序集合,以0表示有序集第一个成员,以1表示有序集第二个成员,以此类推。
  22. // 负数下标,以-1表示最后一个成员,-2表示倒数第二个成员
  23. Set<String> zset = jedis.zrange(key, 0, -1);
  24. System.out.println(zset);
  25. // 返回的成员在指定范围内的逆序集合
  26. zset = jedis.zrevrange(key, 0, -1);
  27. System.out.println(zset);
  28. // 返回zset集合的Tuple元素, 该对象包含 分数和对应的值
  29. Set<Tuple> tuples = jedis.zrangeWithScores(key, 0, -1);
  30. for (Tuple item: tuples) {
  31. System.out.println(item.getScore()+" : "+ item.getElement());
  32. }
  33. // 获取某个元素的分数
  34. Double aaaaScore = jedis.zscore(key, "aaaa");
  35. System.out.println(aaaaScore);
  36. // 给定分数值范围内的成员数
  37. System.out.println(jedis.zcount(key, 0, 7));
  38. }

输出结果:

操作hash

  1. /**
  2. * 对hash的操作
  3. */
  4. @Test
  5. void hashTest() {
  6. // 清空库
  7. jedis.flushDB();
  8. String key = "myhash";
  9. // 添加元素,方式1:
  10. jedis.hset(key, "aa", "11");
  11. // 添加元素,方式2:添加一个map集合
  12. HashMap<String, String> hashMap = new HashMap<>();
  13. hashMap.put("bbb","22");
  14. hashMap.put("cc","33");
  15. jedis.hmset(key, hashMap);
  16. // 获取hash的所有元素(key值)
  17. System.out.println(jedis.hkeys(key));
  18. // 获取hash中所有的key对应的value值
  19. System.out.println(jedis.hvals(key));
  20. // 获取hash里所有元素的数量
  21. System.out.println(jedis.hlen(key));
  22. // 获取hash中全部的域和值,以Map<String, String> 的形式返回
  23. Map<String, String> map = jedis.hgetAll(key);
  24. System.out.println(map);
  25. // 判断给定key值是否存在于哈希集中
  26. System.out.println(jedis.hexists(key, "bbb"));
  27. // 获取指定的值
  28. System.out.println(jedis.hget(key, "aaa"));
  29. // 删除指定的值
  30. System.out.println(jedis.hdel(key, "aaa"));
  31. // 为key中的域 field 的值加上增量 increment
  32. System.out.println(jedis.hincrBy(key, "bbb", 100));
  33. System.out.println(jedis.hgetAll(key));
  34. }

输出结果:

Jedis连接池工具类

  1. import redis.clients.jedis.Jedis;
  2. import redis.clients.jedis.JedisPool;
  3. import redis.clients.jedis.JedisPoolConfig;
  4. /**
  5. * todo jedis-pool 连接池
  6. *
  7. * @author coderzpw.zhang
  8. * @version 1.0
  9. * @date 2022/7/16 18:19
  10. */
  11. public class JedisPoolUtils {
  12. public static final JedisPool jedisPool;
  13. static {
  14. JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
  15. // 资源池中的最大连接数
  16. jedisPoolConfig.setMaxTotal(8);
  17. // 资源池允许的最大空闲连接数
  18. jedisPoolConfig.setMaxIdle(8);
  19. // 资源池确保的最少空闲连接数
  20. jedisPoolConfig.setMinIdle(0);
  21. jedisPoolConfig.setMaxWaitMillis(1000); // 最多等待1000ms
  22. // 创建连接池对象
  23. jedisPool = new JedisPool(jedisPoolConfig, "127.0.0.1", 6379);
  24. }
  25. /**
  26. * 获取一个redis连接对象
  27. * @return
  28. */
  29. public static Jedis getJedis() {
  30. return jedisPool.getResource();
  31. }
  32. }

相关文章