【从0到1进阶Redis】Jedis 操作 Redis

avatar
作者
猴君
阅读量:0

笔记内容来自B站博主《遇见狂神说》:Redis视频链接

Jedis 是一个用于 Java 的 Redis 客户端库,它提供了一组 API 用于与 Redis 数据库进行交互。Redis 是一个高性能的键值存储数据库,广泛用于缓存、消息队列等场景。Jedis 使得 Java 开发者能够方便地与 Redis 进行通信,执行 Redis 命令,并操作 Redis 数据结构。

1、简单了解Jedis

SpringBoot 引入 Jedis

pom.xml

<dependencies>         <!-- jedis -->         <dependency>             <groupId>redis.clients</groupId>             <artifactId>jedis</artifactId>             <version>4.2.3</version>         </dependency>         <!-- fastjson -->         <dependency>             <groupId>com.alibaba</groupId>             <artifactId>fastjson</artifactId>             <version>2.0.49</version>         </dependency>     </dependencies> 

在这里插入图片描述

Jedis源码

可以进入 Jedis 源码看一下,Jedis 构造函数还是挺多的,一般我们用的也就是ip+端口号。
jedis.class
在这里插入图片描述

2、代码测试

连接数据库

package oldfe.study;  import redis.clients.jedis.Jedis;  public class Main {     public static void main(String[] args) {         // 1、 new Jedis 对象         Jedis jedis = new Jedis("127.0.0.1", 6379);         // 2、如果设置密码,需要 auth方法进行密码认证         jedis.auth("123456");         // 3、ping         System.out.println(jedis.ping());  		jedis.close(); // 关闭连接     } } 

输出:
返回表示 PONG 已经连接上
在这里插入图片描述

常用 API

基本API

package oldfe.study;  import redis.clients.jedis.Jedis;  import java.util.Set;  public class Main {     public static void main(String[] args) {         Jedis jedis = new Jedis("127.0.0.1", 6379);         jedis.auth("123456");          System.out.printf("清空全部数据库:%s %n", jedis.flushAll());         System.out.printf("清空当前数据库:%s %n", jedis.flushDB());         System.out.printf("判断某个键是否存在:%s %n", jedis.exists("name"));         System.out.printf("新增<'name', 'OldFe'>键值对::%s %n", jedis.set("name", "OldFe"));         System.out.printf("新增<'age', '16'>键值对::%s %n", jedis.set("age", "16"));         System.out.printf("在集合的键值列表头部插入一个值:%s %n", jedis.lpush("listKey", "listValue"));         System.out.printf("系统中所有的键如下:");         Set<String> keys = jedis.keys("*");         System.out.println(keys);          System.out.printf("删除键age:%s %n", jedis.del("age"));         System.out.printf("判断键age是否存在: %s %n", jedis.exists("age"));         System.out.printf("判断键name所储存的值的类型: %s %n", jedis.type("name"));         System.out.printf("判断键listKey所储存的值的类型: %s %n", jedis.type("listKey"));         System.out.printf("随机返回可以空间的一个: %s %n", jedis.randomKey());         System.out.printf("重命名键name为name1: %s %n", jedis.rename("name", "name1"));         System.out.printf("返回键name1的值: %s %n", jedis.get("name1"));         System.out.printf("按索引查询第1个数据库: %s %n", jedis.select(0)); // Redis 一共有16个数据库(索引下标:0-15)         System.out.printf("返回当前数据库的键: %s %n", jedis.keys("*"));         System.out.printf("返回当前数据库键的数目: %s %n", jedis.dbSize());     } } // 输出: 清空全部数据库:OK  清空当前数据库:OK  判断某个键是否存在:false  新增<'name', 'OldFe'>键值对::OK  新增<'age', '16'>键值对::OK  在集合的键值列表头部插入一个值:1  系统中所有的键如下:[name, listKey, age] 删除键age:1  判断键age是否存在: false  判断键name所储存的值的类型: string  判断键listKey所储存的值的类型: list  随机返回可以空间的一个: listKey  重命名键name为name1: OK  返回键name1的值: OldFe  按索引查询第1个数据库: OK  返回当前数据库的键: [name1, listKey]  返回当前数据库键的数目: 2  

字符串 String

package oldfe.study;  import redis.clients.jedis.Jedis;  import java.util.concurrent.TimeUnit;  public class TestString {     public static void main(String[] args) {         Jedis jedis = new Jedis("127.0.0.1", 6379);         jedis.auth("123456");          jedis.flushDB();         System.out.println("===========增加数据===========");         System.out.println(jedis.set("key1","value1"));         System.out.println(jedis.set("key2","value2"));         System.out.println(jedis.set("key3", "value3"));         System.out.println("删除键key2:"+jedis.del("key2"));         System.out.println("获取键key2:"+jedis.get("key2"));         System.out.println("修改key1:"+jedis.set("key1", "value1Changed"));         System.out.println("获取key1的值:"+jedis.get("key1"));         System.out.println("在key3后面加入值:"+jedis.append("key3", "End"));         System.out.println("key3的值:"+jedis.get("key3"));         System.out.println("增加多个键值对:"+jedis.mset("key01","value01","key02","value02","key03","value03"));         System.out.println("获取多个键值对:"+jedis.mget("key01","key02","key03"));         System.out.println("获取多个键值对:"+jedis.mget("key01","key02","key03","key04"));         System.out.println("删除多个键值对:"+jedis.del("key01","key02"));         System.out.println("获取多个键值对:"+jedis.mget("key01","key02","key03"));          jedis.flushDB();         System.out.println("===========新增键值对防止覆盖原先值==============");         System.out.println(jedis.setnx("key1", "value1"));         System.out.println(jedis.setnx("key2", "value2"));         System.out.println(jedis.setnx("key2", "value2-new"));         System.out.println(jedis.get("key1"));         System.out.println(jedis.get("key2"));          System.out.println("===========新增键值对并设置有效时间=============");         System.out.println(jedis.setex("key3", 2, "value3"));         System.out.println(jedis.get("key3"));         try {             TimeUnit.SECONDS.sleep(3);         } catch (InterruptedException e) {             e.printStackTrace();         }         System.out.println(jedis.get("key3"));          System.out.println("===========获取原值,更新为新值==========");         System.out.println(jedis.getSet("key2", "key2GetSet"));         System.out.println(jedis.get("key2"));          System.out.println("获得key2的值的字串:"+jedis.getrange("key2", 2, 4));     } } // 输出: ===========增加数据=========== OK OK OK 删除键key2:1 获取键key2:null 修改key1:OK 获取key1的值:value1Changed 在key3后面加入值:9 key3的值:value3End 增加多个键值对:OK 获取多个键值对:[value01, value02, value03] 获取多个键值对:[value01, value02, value03, null] 删除多个键值对:2 获取多个键值对:[null, null, value03] ===========新增键值对防止覆盖原先值============== 1 1 0 value1 value2 ===========新增键值对并设置有效时间============= OK value3 null ===========获取原值,更新为新值========== value2 key2GetSet 获得key2的值的字串:y2G 

列表 List

package oldfe.study;  import redis.clients.jedis.Jedis;  public class TestList {     public static void main(String[] args) {         Jedis jedis = new Jedis("127.0.0.1", 6379);         jedis.auth("123456");         jedis.flushDB();         System.out.println("===========添加一个list===========");         jedis.lpush("collections", "ArrayList", "Vector", "Stack", "HashMap", "WeakHashMap", "LinkedHashMap");         jedis.lpush("collections", "HashSet");         jedis.lpush("collections", "TreeSet");         jedis.lpush("collections", "TreeMap");         System.out.println("collections的内容:"+jedis.lrange("collections", 0, -1));//-1代表倒数第一个元素,-2代表倒数第二个元素,end为-1表示查询全部         System.out.println("collections区间0-3的元素:"+jedis.lrange("collections",0,3));         System.out.println("===============================");         // 删除列表指定的值 ,第二个参数为删除的个数(有重复时),后add进去的值先被删,类似于出栈         System.out.println("删除指定元素个数:"+jedis.lrem("collections", 2, "HashMap"));         System.out.println("collections的内容:"+jedis.lrange("collections", 0, -1));         System.out.println("删除下表0-3区间之外的元素:"+jedis.ltrim("collections", 0, 3));         System.out.println("collections的内容:"+jedis.lrange("collections", 0, -1));         System.out.println("collections列表出栈(左端):"+jedis.lpop("collections"));         System.out.println("collections的内容:"+jedis.lrange("collections", 0, -1));         System.out.println("collections添加元素,从列表右端,与lpush相对应:"+jedis.rpush("collections", "EnumMap"));         System.out.println("collections的内容:"+jedis.lrange("collections", 0, -1));         System.out.println("collections列表出栈(右端):"+jedis.rpop("collections"));         System.out.println("collections的内容:"+jedis.lrange("collections", 0, -1));         System.out.println("修改collections指定下标1的内容:"+jedis.lset("collections", 1, "LinkedArrayList"));         System.out.println("collections的内容:"+jedis.lrange("collections", 0, -1));         System.out.println("===============================");         System.out.println("collections的长度:"+jedis.llen("collections"));         System.out.println("获取collections下标为2的元素:"+jedis.lindex("collections", 2));         System.out.println("===============================");         jedis.lpush("sortedList", "3","6","2","0","7","4");         System.out.println("sortedList排序前:"+jedis.lrange("sortedList", 0, -1));         System.out.println(jedis.sort("sortedList"));         System.out.println("sortedList排序后:"+jedis.lrange("sortedList", 0, -1));     } } // 输出: ===========添加一个list=========== collections的内容:[TreeMap, TreeSet, HashSet, LinkedHashMap, WeakHashMap, HashMap, Stack, Vector, ArrayList] collections区间0-3的元素:[TreeMap, TreeSet, HashSet, LinkedHashMap] =============================== 删除指定元素个数:1 collections的内容:[TreeMap, TreeSet, HashSet, LinkedHashMap, WeakHashMap, Stack, Vector, ArrayList] 删除下表0-3区间之外的元素:OK collections的内容:[TreeMap, TreeSet, HashSet, LinkedHashMap] collections列表出栈(左端):TreeMap collections的内容:[TreeSet, HashSet, LinkedHashMap] collections添加元素,从列表右端,与lpush相对应:4 collections的内容:[TreeSet, HashSet, LinkedHashMap, EnumMap] collections列表出栈(右端):EnumMap collections的内容:[TreeSet, HashSet, LinkedHashMap] 修改collections指定下标1的内容:OK collections的内容:[TreeSet, LinkedArrayList, LinkedHashMap] =============================== collections的长度:3 获取collections下标为2的元素:LinkedHashMap =============================== sortedList排序前:[4, 7, 0, 2, 6, 3] [0, 2, 3, 4, 6, 7] sortedList排序后:[4, 7, 0, 2, 6, 3] 

集合 Set

package oldfe.study;  import redis.clients.jedis.Jedis;  public class TestSet {     public static void main(String[] args) {         Jedis jedis = new Jedis("127.0.0.1", 6379);         jedis.auth("123456");                  jedis.flushDB();         System.out.println("============向集合中添加元素(不重复)============");         System.out.println(jedis.sadd("eleSet", "e1","e2","e4","e3","e0","e8","e7","e5"));         System.out.println(jedis.sadd("eleSet", "e6"));         System.out.println(jedis.sadd("eleSet", "e6"));         System.out.println("eleSet的所有元素为:"+jedis.smembers("eleSet"));         System.out.println("删除一个元素e0:"+jedis.srem("eleSet", "e0"));         System.out.println("eleSet的所有元素为:"+jedis.smembers("eleSet"));         System.out.println("删除两个元素e7和e6:"+jedis.srem("eleSet", "e7","e6"));         System.out.println("eleSet的所有元素为:"+jedis.smembers("eleSet"));         System.out.println("随机的移除集合中的一个元素:"+jedis.spop("eleSet"));         System.out.println("随机的移除集合中的一个元素:"+jedis.spop("eleSet"));         System.out.println("eleSet的所有元素为:"+jedis.smembers("eleSet"));         System.out.println("eleSet中包含元素的个数:"+jedis.scard("eleSet"));         System.out.println("e3是否在eleSet中:"+jedis.sismember("eleSet", "e3"));         System.out.println("e1是否在eleSet中:"+jedis.sismember("eleSet", "e1"));         System.out.println("e1是否在eleSet中:"+jedis.sismember("eleSet", "e5"));         System.out.println("=================================");         System.out.println(jedis.sadd("eleSet1", "e1","e2","e4","e3","e0","e8","e7","e5"));         System.out.println(jedis.sadd("eleSet2", "e1","e2","e4","e3","e0","e8"));         System.out.println("将eleSet1中删除e1并存入eleSet3中:"+jedis.smove("eleSet1", "eleSet3", "e1"));//移到集合元素         System.out.println("将eleSet1中删除e2并存入eleSet3中:"+jedis.smove("eleSet1", "eleSet3", "e2"));         System.out.println("eleSet1中的元素:"+jedis.smembers("eleSet1"));         System.out.println("eleSet3中的元素:"+jedis.smembers("eleSet3"));         System.out.println("============集合运算=================");         System.out.println("eleSet1中的元素:"+jedis.smembers("eleSet1"));         System.out.println("eleSet2中的元素:"+jedis.smembers("eleSet2"));         System.out.println("eleSet1和eleSet2的交集:"+jedis.sinter("eleSet1","eleSet2"));         System.out.println("eleSet1和eleSet2的并集:"+jedis.sunion("eleSet1","eleSet2"));         System.out.println("eleSet1和eleSet2的差集:"+jedis.sdiff("eleSet1","eleSet2"));//eleSet1中有,eleSet2中没有         jedis.sinterstore("eleSet4","eleSet1","eleSet2");//求交集并将交集保存到dstkey的集合         System.out.println("eleSet4中的元素:"+jedis.smembers("eleSet4"));     } } // 输出: ============向集合中添加元素(不重复)============ 8 1 0 eleSet的所有元素为:[e5, e6, e7, e8, e0, e1, e2, e3, e4] 删除一个元素e0:1 eleSet的所有元素为:[e5, e6, e7, e8, e1, e2, e3, e4] 删除两个元素e7和e6:2 eleSet的所有元素为:[e5, e8, e1, e2, e3, e4] 随机的移除集合中的一个元素:e5 随机的移除集合中的一个元素:e1 eleSet的所有元素为:[e2, e3, e4, e8] eleSet中包含元素的个数:4 e3是否在eleSet中:true e1是否在eleSet中:false e1是否在eleSet中:false ================================= 8 6 将eleSet1中删除e1并存入eleSet3中:1 将eleSet1中删除e2并存入eleSet3中:1 eleSet1中的元素:[e5, e7, e0, e8, e3, e4] eleSet3中的元素:[e1, e2] ============集合运算================= eleSet1中的元素:[e5, e7, e0, e8, e3, e4] eleSet2中的元素:[e0, e8, e1, e2, e3, e4] eleSet1和eleSet2的交集:[e3, e4, e0, e8] eleSet1和eleSet2的并集:[e5, e7, e0, e8, e1, e2, e3, e4] eleSet1和eleSet2的差集:[e7, e5] eleSet4中的元素:[e3, e4, e0, e8] 

哈希 Hash

package oldfe.study;  import redis.clients.jedis.Jedis;  import java.util.HashMap; import java.util.Map;  public class TestHash {     public static void main(String[] args) {         Jedis jedis = new Jedis("127.0.0.1", 6379);         jedis.auth("123456");         jedis.flushDB();         Map<String,String> map = new HashMap<String,String>();         map.put("key1","value1");         map.put("key2","value2");         map.put("key3","value3");         map.put("key4","value4");         //添加名称为hash(key)的hash元素         jedis.hmset("hash",map);         //向名称为hash的hash中添加key为key5,value为value5元素         jedis.hset("hash", "key5", "value5");         System.out.println("散列hash的所有键值对为:"+jedis.hgetAll("hash"));//return Map<String,String>         System.out.println("散列hash的所有键为:"+jedis.hkeys("hash"));//return Set<String>         System.out.println("散列hash的所有值为:"+jedis.hvals("hash"));//return List<String>         System.out.println("将key6保存的值加上一个整数,如果key6不存在则添加key6:"+jedis.hincrBy("hash", "key6", 6));         System.out.println("散列hash的所有键值对为:"+jedis.hgetAll("hash"));         System.out.println("将key6保存的值加上一个整数,如果key6不存在则添加key6:"+jedis.hincrBy("hash", "key6", 3));         System.out.println("散列hash的所有键值对为:"+jedis.hgetAll("hash"));         System.out.println("删除一个或者多个键值对:"+jedis.hdel("hash", "key2"));         System.out.println("散列hash的所有键值对为:"+jedis.hgetAll("hash"));         System.out.println("散列hash中键值对的个数:"+jedis.hlen("hash"));         System.out.println("判断hash中是否存在key2:"+jedis.hexists("hash","key2"));         System.out.println("判断hash中是否存在key3:"+jedis.hexists("hash","key3"));         System.out.println("获取hash中的值:"+jedis.hmget("hash","key3"));         System.out.println("获取hash中的值:"+jedis.hmget("hash","key3","key4"));     } } // 输出: 散列hash的所有键值对为:{key1=value1, key2=value2, key5=value5, key3=value3, key4=value4} 散列hash的所有键为:[key1, key2, key5, key3, key4] 散列hash的所有值为:[value1, value2, value3, value4, value5] 将key6保存的值加上一个整数,如果key6不存在则添加key6:6 散列hash的所有键值对为:{key1=value1, key2=value2, key5=value5, key6=6, key3=value3, key4=value4} 将key6保存的值加上一个整数,如果key6不存在则添加key6:9 散列hash的所有键值对为:{key1=value1, key2=value2, key5=value5, key6=9, key3=value3, key4=value4} 删除一个或者多个键值对:1 散列hash的所有键值对为:{key1=value1, key5=value5, key6=9, key3=value3, key4=value4} 散列hash中键值对的个数:5 判断hash中是否存在key2:false 判断hash中是否存在key3:true 获取hash中的值:[value3] 获取hash中的值:[value3, value4] 

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!