【从0到1进阶Redis】Jedis 操作 Redis
创始人
2024-11-10 15:12:16

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

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

1、简单了解Jedis

SpringBoot 引入 Jedis

pom.xml

                               redis.clients             jedis             4.2.3                                        com.alibaba             fastjson             2.0.49               

在这里插入图片描述

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 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 map = new HashMap();         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         System.out.println("散列hash的所有键为:"+jedis.hkeys("hash"));//return Set         System.out.println("散列hash的所有值为:"+jedis.hvals("hash"));//return List         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] 

相关内容

热门资讯

裸辞做“一人公司”,我后悔了 去年这个时候,一位以色列程序员正在东南亚旅行。他顺手把一个在脑子里转了很久的想法做成了产品,一个让任...
南京建成国内首个Pre-6G试... 4月21日,2026全球6G技术与产业生态大会在南京开幕。全息互动技术展台前,一名远在北京的工作人员...
超梵求职受邀参加“2025抖音... 超梵求职受邀参加“2025抖音巨量引擎成人教育行业生态大会”,探讨分享优质内容传播,服务万千学员。 ...
摩托罗拉Razr 2026(R... IT之家 4 月 22 日消息,摩托罗拉宣布新一代 Razr 折叠手机将于 4 月 29 日在美国发...
库克卸任,特纳斯领航:苹果新纪... 苹果首席执行官蒂姆·库克将卸任,硬件工程主管约翰·特纳斯将接任,苹果公司今天宣布此事。 库克将在夏季...