1、定义与背景
- Jedis是Redis官方推崇的Java客户端实现之一,允许Java程序通过其提供的Java API与Redis服务器进行交互。
- Redis是一款高性能的NOSQL系列的非关系型数据库,使用C语言开发,支持多种键值数据类型,包括字符串、哈希、列表、集合和有序集合等。
2、主要特点
- 简单易用:Jedis提供了直观的API,使得与Redis的交互变得简单而直观。
- 高性能:Jedis被设计为高性能的Redis客户端,通过连接池等技术提高通信效率,并支持异步操作。
- 支持多种数据结构:Jedis完全支持Redis所提供的各种数据结构,满足各种业务需求。
- 集群支持:Jedis提供了对Redis集群的支持,实现数据的高可用和扩展性。
- 发布订阅:支持Redis的发布订阅功能,可用于实现消息队列、事件通知等场景。
3、使用步骤
步骤1.创建一个maven工程
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>redis_demo</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.7</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>4.0.1</version>
</dependency>
</dependencies>
</project>
步骤2.配置logback用到的xml文件 logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration
xmlns="http://ch.qos.logback/xml/ns/logback"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ch.qos.logback/xml/ns/logback logback.xsd">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%date{HH:mm:ss.SSS} %c [%t] - %m%n</pattern>
</encoder>
</appender>
<logger name="c" level="debug" additivity="false">
<appender-ref ref="STDOUT"/>
</logger>
<root level="ERROR">
<appender-ref ref="STDOUT"/>
</root>
</configuration>
步骤3:修改redis.conf的配置文件 ,加入当前虚拟机的ip地址
bind 192.168.44.4 127.0.0.1 -::1
步骤4:修改redis.conf的配置文件,将文件保护模式修改,原有默认值是yes,改成no protected-mode no
步骤5:查看一下linux防火墙状态
systemctl status firewalld 默认是打开的 绿色active(running)
步骤6:关闭防火墙
systemctl stop firewalld
关闭之后再去查看防火墙状态
inactive (dead)
步骤7:测试连接
@Slf4j(topic = "c.TestConnection")
public class TestConnection {
public static void main(String[] args) {
Jedis jedis=new Jedis("192.168.44.4",6379);
String p = jedis.ping();
log.debug(p);
}
}
4、操作不同数据类型
4.1字符串(String)
-
设置和获取
- 使用
jedis.set(key, value)
设置字符串值。 - 使用
jedis.get(key)
获取字符串值。
- 使用
-
追加字符串
- 使用
jedis.append(key, value)
在已存在的字符串后追加字符串。
- 使用
-
自增/自减
- 使用
jedis.incr(key)
和jedis.decr(key)
对字符串值进行整数自增/自减。
- 使用
示例代码:
Jedis jedis = new Jedis("localhost", 6379);
jedis.set("username", "john_doe");
String username = jedis.get("username");
System.out.println("Username: " + username);
jedis.append("username", "_updated");
System.out.println("Updated Username: " + jedis.get("username"));
jedis.incr("counter"); // 假设counter是一个整数
System.out.println("Counter: " + jedis.get("counter"));
jedis.close();
4.2哈希表(Hash)
-
设置字段和值
- 使用
jedis.hset(key, field, value)
设置哈希表中字段的值。
- 使用
-
获取字段值
- 使用
jedis.hget(key, field)
获取哈希表中字段的值。
- 使用
-
获取所有字段和值
- 使用
jedis.hgetAll(key)
获取哈希表中所有字段和值。
- 使用
示例代码:
Jedis jedis = new Jedis("localhost", 6379);
jedis.hset("user:1", "name", "John");
jedis.hset("user:1", "age", "30");
String name = jedis.hget("user:1", "name");
System.out.println("Name: " + name);
Map<String, String> userMap = jedis.hgetAll("user:1");
for (Map.Entry<String, String> entry : userMap.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
jedis.close();
4.3列表(List)
-
在列表两端插入元素
- 使用
jedis.lpush(key, values...)
在列表左侧插入元素。 - 使用
jedis.rpush(key, values...)
在列表右侧插入元素。
- 使用
-
获取列表元素
- 使用
jedis.lrange(key, start, end)
获取列表中的元素范围。
- 使用
-
从列表两端移除元素
- 使用
jedis.lpop(key)
从列表左侧移除并返回元素。 - 使用
jedis.rpop(key)
从列表右侧移除并返回元素。
- 使用
示例代码:
Jedis jedis = new Jedis("localhost", 6379);
jedis.lpush("mylist", "a", "b", "c");
List<String> list = jedis.lrange("mylist", 0, -1);
System.out.println("List: " + list);
String leftElement = jedis.lpop("mylist");
System.out.println("Left Element: " + leftElement);
jedis.close();
4.4集合(Set)和有序集合(Sorted Set)
集合和有序集合的操作与列表类似,但集合不允许重复元素,有序集合的元素按分数排序。使用jedis.sadd(key, members...)
向集合添加元素,使用jedis.zadd(key, score, member)
向有序集合添加元素等。
示例代码(仅有序集合):
Jedis jedis = new Jedis("localhost", 6379);
jedis.zadd("sortedset", 1, "a");
jedis.zadd("sortedset", 2, "b");
Set<Tuple> tuples = jedis.zrevrangeWithScores("sortedset", 0, -1);
for (Tuple tuple : tuples) {
System.out.println("Member: " + tuple.getElement() + ", Score: " + tuple.getScore