Jedis零基础入门及操作Redis中的数据结构详解
作者:流楚丶格念
Jedis 的 API 方法跟 Redis 的命令基本上完全一致,熟悉 Redis 的操作命令,自然就很容易使用 Jedis,因此官方也推荐 Java 使用 Jedis 来连接和操作 Redis
Jedis简介及其入门
Jedis简介
redis是当今基本所有互联网产品都在使用的一种提供键值对形式的内存数据库。之所以说是内存数据库,是因为redis基于内存的读取和写入相比传统的数据库基于磁盘IO快上数倍。于是乎redis在现在的应用中使用的非常广泛。
redis主要的作用在于:
- 提供缓存服务,存储访问频率高的热数据防止穿透到数据库
- 在分布式系统中可以作为实现分布式锁的一种实现方案
那jedis就是集成了redis的一些命令操作,封装了redis的java客户端。提供了连接池管理。一般不直接使用jedis,而是在其上在封装一层,作为业务的使用
总结:Jedis: 一款java操作redis数据库的工具。
Jedis的操作入门
导入Jedis的依赖
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.4.0</version> </dependency>
建立测试类进行使用
package com.yyl.firstdemo; import org.junit.jupiter.api.Test; import redis.clients.jedis.Jedis; public class JedisTest { @Test public void ConnectionTest(){ //建立连接 Jedis jedis = new Jedis("localhost", 6379); //设置连接redis的密码 没密码,就不写 // jedis.auth(""); //操作 jedis.set("username", "zhangsan"); //关闭连接 jedis.close(); } }
先启动redis服务端,再运行代码
运行结束以后,username就存在了redis中
Jedis操作Redis中的数据结构
字符串类型 string
代码如下,set与get默认的就是操作字符串类型
@Test public void JedisStringTest() { // 建立连接,如果无参,默认主机名为localhost,port为6379 Jedis jedis = new Jedis(); // 设置连接redis的密码 // jedis.auth("123456"); // 操作数据 // set存储数据 jedis.set("username", "yangminghui"); // get获取数据 String name = jedis.get("username"); System.out.println(name); //关闭连接 jedis.close(); }
运行结果:
在操作字符串时,也可以指定数据的保存时间,超过指定时间之后,数据自动删除,比如发送验证码,该验证码在指定的时间内有效,可以通过这种方式实现。
使用setex函数
存储具有时间限制的数据
参数如下:
- 第一个参数key,是存储的键
- 第二个有效期,以秒为单位
- 第三个参数value,是要存储的值
例如:
jedis.setex("yang", 10, "666");
存储键为yang
,值为666
的数据,有效期为10s,10s之后自动删除
代码如下:
@Test public void JedisStringSetexTest() throws InterruptedException { // 建立连接,如果无参,默认主机名为localhost,port为6379 Jedis jedis = new Jedis(); // 设置连接redis的密码 // jedis.auth("123456"); // 操作数据 // setex存储具有时间限制的数据 // 第一个参数key,第二个有效期,以秒为单位,第三个参数value jedis.setex("username", 3,"yangminghui"); // get获取数据 String name = jedis.get("username"); System.out.println(name); Thread.sleep(4000); String name2 = jedis.get("username"); System.out.println(name2); //关闭连接 jedis.close(); }
运行结果:
哈希类型 map
代码如下:
@Test public void JedisHashTest(){ //建立连接 Jedis jedis = new Jedis("localhost", 6379); // 设置连接redis的密码 // jedis.auth("123456"); //操作数据 //hset存储数据 jedis.hset("myhash", "username", "yangminghui"); jedis.hset("myhash", "password", "666666"); jedis.hset("myhash", "sex", "male"); //hget获取数据 String password = jedis.hget("myhash", "password"); System.out.println("password"+password); System.out.println("---------------------------------"); //hgetall获取所有,得到map集合 Map<String, String> map = jedis.hgetAll("myhash"); //遍历map集合 Set<Map.Entry<String, String>> entrySet = map.entrySet(); for (Map.Entry<String, String> entry : entrySet) { System.out.println(entry.getKey()+":"+entry.getValue()); } //关闭连接 jedis.close(); }
运行结果:
列表类型 list
代码如下:
@Test public void JedisListTest(){ //建立连接 Jedis jedis = new Jedis("localhost",6379); //设置连接redis的密码 // jedis.auth("123456"); //操作数据 //lpush向列表的左边添加数据 jedis.lpush("mylist", "a","b","c"); //rpush,向列表的右边添加数据 jedis.rpush("mylist", "d","e"); //获取数据,第一个参数为键,第二个参数为起始值,第三个参数为结束值,-1表示到最后一个 List<String> list = jedis.lrange("mylist", 0, -1); for (String string : list) { System.out.println(string); } System.out.println("--------------"); //删除并且返回最左边的元素 String value1 = jedis.lpop("mylist"); System.out.println(value1); System.out.println("--------------"); //删除并且返回最右边的元素 String value2 = jedis.rpop("mylist"); System.out.println(value2); System.out.println("--------------"); //再次获取 List<String> list2 = jedis.lrange("mylist", 0, -1); System.out.println(list2); //关闭连接 jedis.close(); }
运行结果如下:
集合类型 set
代码如下:
@Test public void JedisSetTest(){ // 建立连接 Jedis jedis = new Jedis("localhost",6379); // 设置连接redis的密码 // jedis.auth("123456"); //操作数据 //sadd添加数据 jedis.sadd("myset", "b","a","d","a"); // smembers获取元素 Set<String> set = jedis.smembers("myset"); for (String string : set) { System.out.println(string); } // 关闭连接 jedis.close(); }
获取结果没有重复的值:
有序集合类型 sortedset
代码如下,使用zadd添加数据的时候需要设置数据的排序分数:
@Test public void JedisSortedSetTest(){ // 建立连接 Jedis jedis = new Jedis("localhost",6379); // 设置连接redis的密码 // jedis.auth("123456"); //操作数据 //zadd添加数据 jedis.zadd("mysort", 50, "yang"); jedis.zadd("mysort", 12, "yu"); jedis.zadd("mysort", 22 , "wang"); //zrange获取元素,第一个参数键,第二个起始位置,第三个参数结束位置 Set<String> set = jedis.zrange("mysort", 0, -1); for (String string : set) { System.out.println(string); } System.out.println("-------------"); //带分数获取 Set<Tuple> set2 = jedis.zrangeWithScores("mysort", 0, -1); for (Tuple tuple : set2) { System.out.println(tuple.getElement()+":"+tuple.getScore()); } //关闭连接 jedis.close(); }
运行结果如下:
到此这篇关于Jedis零基础入门及操作Redis中的数据结构详解的文章就介绍到这了,更多相关Jedis操作Redis内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!