
redis的java客户端很多,官方推荐的有三种:
使用Jedis操作Redis的步骤:
1.获取链接;
2.执行操作;
3.关闭连接;
- import redis.clients.jedis.Jedis;
-
- public class RedisJava {
- public static void main(String[] args) {
- //连接本地的 Redis 服务
- Jedis jedis = new Jedis("localhost");
-
- // 如果 Redis 服务设置了密码,需要下面这行,没有就不需要
- // jedis.auth("123456");
- System.out.println("连接成功");
-
- //查看服务是否运行
- System.out.println("服务正在运行: "+jedis.ping());
- }
- }
编译以上 Java 程序,确保驱动包的路径是正确的。
- 连接成功
-
- 服务正在运行: PONG
- import redis.clients.jedis.Jedis;
-
- public class RedisStringJava {
- public static void main(String[] args) {
- //连接本地的 Redis 服务
- Jedis jedis = new Jedis("localhost");
- System.out.println("连接成功");
-
- //设置 redis 字符串数据
- jedis.set("runoobkey", "www.runoob.com");
-
- // 获取存储的数据并输出
- System.out.println("redis 存储的字符串为: "+ jedis.get("runoobkey"));
- }
- }
编译以上程序。
- 连接成功 redis
-
- 存储的字符串为: www.runoob.com
- import java.util.List;
- import redis.clients.jedis.Jedis;
-
- public class RedisListJava {
- public static void main(String[] args) {
- //连接本地的 Redis 服务
- Jedis jedis = new Jedis("localhost");
- System.out.println("连接成功");
-
- //存储数据到列表中
- jedis.lpush("site-list", "Runoob");
- jedis.lpush("site-list", "Google");
- jedis.lpush("site-list", "Taobao");
-
- // 获取存储的数据并输出
- List
list = jedis.lrange("site-list", 0 ,2); - for(int i=0; i
- System.out.println("列表项为: "+list.get(i));
- }
- }
- }
编译以上程序。
- 连接成功
- 列表项为: Taobao
- 列表项为: Google
- 列表项为: Runoob
1.2.4 Redis Java Keys 实例
- import java.util.Iterator;
- import java.util.Set;
- import redis.clients.jedis.Jedis;
-
- public class RedisKeyJava {
- public static void main(String[] args) {
- //连接本地的 Redis 服务
- Jedis jedis = new Jedis("localhost");
- System.out.println("连接成功");
-
- // 获取数据并输出
- Set
keys = jedis.keys("*"); - Iterator
it=keys.iterator() ; - while(it.hasNext()){
- String key = it.next();
- System.out.println(key);
- }
- }
- }
编译以上程序。
- 连接成功
-
- runoobkey site-list
1.3 Lettuce
另一个流行的Java Redis客户端库Lettuce,它具有异步和响应式API,支持集群模式、Sentinel模式以及Redis 6中的新特性。以下是使用Lettuce连接Redis并执行一些基本操作的代码示例:

在上面的代码中,我们使用了Lettuce客户端库来连接Redis服务器并执行一些基本操作。首先,我们创建了一个RedisClient实例,并将Redis服务器的地址和端口作为参数传递给create方法。然后,我们通过调用connect方法来创建一个StatefulRedisConnection实例,该实例提供了同步和异步的API来操作Redis。接下来,我们使用sync方法来获取一个同步的RedisCommands实例,然后使用set方法来设置一个键值对,get方法获取一个键的值,del方法删除一个键。最后,我们关闭了连接哦。
1.4 Redisson
Redisson是一个基于Netty框架的Java Redis客户端库,它提供了分布式锁、分布式集合、分布式对象等功能,支持Redis集群和Sentinel模式。以下是使用Redisson连接Redis并执行一些基本操作的代码示例:

在上面的代码中,我们使用了Redisson客户端库来连接Redis服务器并执行一些基本操作。首先,我们创建了一个Config实例,并使用useSingleServer方法来指定Redis服务器的地址和端口。然后,我们通过调用create方法来创建一个RedissonClient实例。接下来,我们使用getBucket方法来获取一个RBucket实例,该实例可以用来操作一个特定的键。我们使用set方法来设置一个键值对,get方法获取一个键的值,delete方法删除一个键。最后,我们关闭了连接。
1.5 Spring Data Redis
Spring Data Redis 中提供了一个高度封装的类,针对jedis客户端中大量api进行了归类封装,将同一类型操作封装为operation接口,具体分类如下:
- ValueOperations:简单K-V操作
- SetOperations :set 类型数据操作
- ZSetOperations:zset 类型数据操作
- HashOperations:针对map类型的数据操作
- ListOperations:针对list类型的数据操作
默认操作的是0号数据库,也可以切换其他数据库:

设置一下序列化,这样设置key的时候不会变成乱码:
- package com.example.demotest;
-
- import org.springframework.cache.annotation.CachingConfigurerSupport;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.data.redis.connection.RedisConnectionFactory;
- import org.springframework.data.redis.core.RedisTemplate;
- import org.springframework.data.redis.serializer.StringRedisSerializer;
-
- @Configuration
- public class RedisConfig extends CachingConfigurerSupport {
-
- @Bean
- public RedisTemplate
-
- RedisTemplate
-
- redisTemplate.setKeySerializer(new StringRedisSerializer());
-
- redisTemplate.setHashKeySerializer(new StringRedisSerializer());
-
- redisTemplate.setConnectionFactory(connectionFactory);
- return redisTemplate;
- }
- }
- package com.example.demotest;
-
- import org.junit.Test;
- import org.junit.runner.RunWith;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.boot.test.context.SpringBootTest;
- import org.springframework.data.redis.connection.DataType;
- import org.springframework.data.redis.core.*;
- import org.springframework.test.context.junit4.SpringRunner;
-
- import java.util.List;
- import java.util.Set;
- import java.util.concurrent.TimeUnit;
-
- @SpringBootTest
- @RunWith(SpringRunner.class)
- public class SpringDataRedisTest {
-
- @Autowired
- private RedisTemplate redisTemplate;
-
- @Test
- public void testString(){
- redisTemplate.opsForValue().set("city2","sz");
- String city2 = (String) redisTemplate.opsForValue().get("city2");
- System.out.println("打印一下" + city2);
- //指定过期时间 10 秒
- redisTemplate.opsForValue().set("key1","value1",10l, TimeUnit.SECONDS);
- //如果不存在key则设置
- Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent("city", "sz");
- System.out.println(aBoolean);
-
- }
-
- @Test
- public void testHash(){
- HashOperations hashOperations = redisTemplate.opsForHash();
- //存值
- hashOperations.put("002","name","hh");
- hashOperations.put("002","age","20");
- hashOperations.put("002","address","sz");
- //取值
- String age = (String) hashOperations.get("002", "age");
- System.out.println(age);
-
- //获得hash结构中的所有字段
- Set keys = hashOperations.keys("002");
- for (Object key : keys) {
- System.out.println(key);
- }
- //获得hash结构中的所有值
- List values = hashOperations.values("002");
- for (Object value : values) {
- System.out.println(value);
- }
-
- }
-
- /**
- * 操作list类型的数据
- */
- @Test
- public void testList(){
- ListOperations listOperations = redisTemplate.opsForList();
-
- //存储
- listOperations.leftPush("mylist","a");
- listOperations.leftPushAll("mylist","b","c","d");
-
- //取值
- List
mylist = listOperations.range("mylist", 0, -1); - for (String value : mylist) {
- System.out.println(value);
- }
-
- //获得列表长度
- Long size = listOperations.size("mylist");
- int lSize = size.intValue();
- for (int i = 0; i < lSize; i++) {
- //出队列
- String elment = (String) listOperations.rightPop("mylist");
- System.out.println(elment);
- }
- }
-
- /**
- * 操作set类型的数据
- */
- @Test
- public void testSet(){
- SetOperations setOperations = redisTemplate.opsForSet();
-
- //存值
- setOperations.add("myset","a","b","c","a");
-
- //取值
- Set
myset = setOperations.members("myset"); - for (String s : myset) {
- System.out.println(s);
- }
- //删除成员
- setOperations.remove("myset","a","b");
-
- //取值
- myset = setOperations.members("myset");
- for (String s : myset) {
- System.out.println(s);
- }
- }
-
- /**
- * 操作zset类型的数据
- */
- @Test
- public void testZset(){
- ZSetOperations zSetOperations = redisTemplate.opsForZSet();
-
- //存值
- zSetOperations.add("myZset","a",10.0);
- zSetOperations.add("myZset","b",11.0);
- zSetOperations.add("myZset","d",12.0);
- zSetOperations.add("myZset","a",13.0);
-
- //取值
- Set
myZset = zSetOperations.range("myZset", 0, -1); - for (String s : myZset) {
- System.out.println(s);
- }
- //修改分数
- zSetOperations.incrementScore("myZset","b",20.0);
-
- //取值
- myZset = zSetOperations.range("myZset", 0, -1);
- for (String s : myZset) {
- System.out.println(s);
- }
- //删除成员
- zSetOperations.remove("myZset","a","b");
- }
-
- @Test
- public void testCommon(){
- //获取Redis 中所有的key
- Set
keys = redisTemplate.keys("*"); - for (String key : keys) {
- System.out.println(key);
- }
-
- //判断某个key是否存在
- Boolean hh = redisTemplate.hasKey("hh");
- System.out.println(hh);
-
- //删除指定key
- redisTemplate.delete("myzset");
-
- //获取指定key对应的value的数据类型
- DataType dataType = redisTemplate.type("myset");
- System.out.println(dataType.name());
- }
- }

参考链接
在Java中操作Redis_java redis_周盛欢的博客-CSDN博客