资讯 小学 初中 高中 语言 会计职称 学历提升 法考 计算机考试 医护考试 建工考试 教育百科
栏目分类:
子分类:
返回
空麓网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
空麓网 > 计算机考试 > 软件开发 > 后端开发 > Java

如何在Java中操作Redis

Java 更新时间: 发布时间: 计算机考试归档 最新发布

如何在Java中操作Redis

Redis的Java客户端很多,官方推荐的有三种:

  1. Jedis
  2. Lettuce
  3. Redisson

Spring对Redis客户端进行了整合,提供了Spring Data Redis,在Spring Boot项目中还提供了对应的Starter,即spring-boot-starter-data-redis。

目录

目录

1.利用Jedis操作Redis:

1.1 连接Redis

1.2 执行Redis命令

1.3 关闭连接

2.利用Lettuce操作Redis:

2.1 添加Lettuce依赖

2.2 创建Redis连接

2.3 执行Redis操作

2.4 关闭Redis连接

3.利用Redisson操作Redis:

3.1 添加Redisson依赖

3.2 创建Redisson客户端

3.3 使用Redisson客户端操作Redis

Spring Data Redis

序列化器编写如下:

操作Key-Value类型数据:

操作Hash类型数据:

操作List类型数据:

操作Set类型数据:

操作ZSet类型数据:

通用操作:


1.利用Jedis操作Redis:

Jedis的Maven坐标:

         redis.clients         jedis         2.8.0

1.1 连接Redis

使用Jedis连接Redis需要指定Redis服务器的IP地址和端口号。以下是连接Redis的示例代码:

Jedis jedis = new Jedis("localhost", 6379);

1.2 执行Redis命令

使用Jedis可以执行Redis支持的各种命令,例如set、get、incr等等。以下是一些示例代码:

// 设置key-value对jedis.set("key", "value");// 获取key对应的valueString value = jedis.get("key");// 对key的值进行自增操作jedis.incr("key");

1.3 关闭连接

使用完Jedis之后,需要关闭连接。以下是关闭连接的示例代码:

jedis.close();

以上是使用Jedis访问Redis的基本步骤。如果需要更详细的信息,可以参考Jedis官方文档:

https://github.com/redis/jedis


2.利用Lettuce操作Redis:

Lettuce是一个高性能的Redis客户端,它提供了异步、同步和响应式的API。下面是一些关于如何在Java中通过Lettuce使用Redis的信息:

2.1 添加Lettuce依赖

在Maven项目中,可以通过添加以下依赖来使用Lettuce:

          io.lettuce          lettuce-core          5.3.3.RELEASE

2.2 创建Redis连接

可以使用以下代码创建一个Redis连接:

RedisClient redisClient = RedisClient.create("redis://localhost");StatefulRedisConnection connection = redisClient.connect();

这将创建一个与本地Redis服务器的连接。

2.3 执行Redis操作

可以使用以下代码执行Redis操作:

RedisCommands syncCommands = connection.sync();syncCommands.set("key", "value");String value = syncCommands.get("key");

这将设置一个键值对并获取它的值。

2.4 关闭Redis连接

在完成Redis操作后,应该关闭Redis连接:

connection.close();redisClient.shutdown();

这将关闭与Redis服务器的连接并释放资源。

Lettuce官方文档:

https://lettuce.io/core/release/reference/

以下是一些有关如何在Java中通过Lettuce使用Redis的代码:

import io.lettuce.core.RedisClient;import io.lettuce.core.RedisCommands;import io.lettuce.core.api.StatefulRedisConnection;import io.lettuce.core.api.sync.RedisCommands;public class LettuceExample {    public static void main(String[] args) {        RedisClient redisClient = RedisClient.create("redis://localhost");        StatefulRedisConnection connection = redisClient.connect();        RedisCommands syncCommands = connection.sync();        syncCommands.set("key", "value");        String value = syncCommands.get("key");        System.out.println(value);        connection.close();        redisClient.shutdown();    }}

3.利用Redisson操作Redis:

Redisson是一个基于Redis的Java客户端,它提供了许多方便的功能和API来使用Redis。以下是如何在Java中使用Redisson连接Redis的步骤:

3.1 添加Redisson依赖

    org.redisson    redisson    3.15.5

3.2 创建Redisson客户端

Config config = new Config();config.useSingleServer().setAddress("redis://localhost:6379");RedissonClient redisson = Redisson.create(config);

3.3 使用Redisson客户端操作Redis

// 获取字符串RBucket bucket = redisson.getBucket("myKey");String value = bucket.get();// 设置字符串bucket.set("myValue");// 获取MapRMap map = redisson.getMap("myMap");String mapValue = map.get("myMapKey");// 设置Mapmap.put("myMapKey", "myMapValue");

Redisson官方文档:https://redisson.org/


Spring Data Redis

Spring Data Redis中提供了一个高度封装的类:RedisTemplate,针对Jedis客户端中大量API进行了归类封装,将同一类型操作封装为operation接口,具体分类如下:

  • ValueOperations:简单K-V操作
  • SetOperations:无序集合类型数据操作
  • ZSetOperations:有序集合类型数据操作
  • HashOperations:针对Map类型的数据操作
  • ListOperations:针对List类型的数据操作

注意: RedisTemplate在操作Redis时默认对Key进行了序列化,使用的是StringRedisSerializer进行序列化。 这是因为Redis的Key必须是字符串类型,而Java中的对象类型需要进行序列化才能转化为字符串类型。 因此,RedisTemplate使用默认的StringRedisSerializer对Key进行序列化,将Java对象转化为字符串类型作为Redis的Key。 如果需要自定义Key的序列化方式,可以通过RedisTemplate的setKeySerializer方法设置Key的序列化器。

序列化器编写如下:

package com.itheima.config;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;@Configurationpublic class RedisConfig extends CachingConfigurerSupport {    @Bean    public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) {        RedisTemplate redisTemplate = new RedisTemplate<>();        //默认的Key序列化器为:JdkSerializationRedisSerializer        redisTemplate.setKeySerializer(new StringRedisSerializer());        redisTemplate.setHashKeySerializer(new StringRedisSerializer());        redisTemplate.setConnectionFactory(connectionFactory);        return redisTemplate;    }}

操作Key-Value类型数据:

 @Test public void testString() {     //ValueOperations valueOperations = redisTemplate.opsForValue();     //redisTemplate.opsForValue().set("city123","beijing");     System.out.println("city123:" + redisTemplate.opsForValue().get("city123"));     redisTemplate.opsForValue().set("key1", "value1", 10L, TimeUnit.SECONDS);     Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent("city1234", "nanjing");     System.out.println(aBoolean); }

操作Hash类型数据:

//操作Hash类型数据@Testpublic void testHash() {    HashOperations hashOperations = redisTemplate.opsForHash();    //存值    hashOperations.put("002", "name", "xiaoming");    hashOperations.put("002", "age", "20");    hashOperations.put("002", "address", "beijing");    //取值    String name = (String) hashOperations.get("002", "name");    String age = (String) hashOperations.get("002", "age");    System.out.println("name:" + name + "   age:" + 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类型数据:

@Testpublic 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 element = (String) listOperations.rightPop("myList");        System.out.println(element);    }}

操作Set类型数据:

@Testpublic void testSet() {    SetOperations setOperations = redisTemplate.opsForSet();    //存值    setOperations.add("mySet", "a", "b", "c", "a");    //取值    Set mySet = setOperations.members("mySet");    for (String value : mySet) {        System.out.println(value);    }    //删除成员    setOperations.remove("mySet", "a", "b");    System.out.println("----------------");    //再次取值    for (String value : mySet) {        System.out.println(value);    }}

操作ZSet类型数据:

@Testpublic void testZSet() {    ZSetOperations zSetOperations = redisTemplate.opsForZSet();    //存值    zSetOperations.add("myZSet", "a", 10.0);    zSetOperations.add("myZSet", "b", 9.0);    zSetOperations.add("myZSet", "c", 11.0);    zSetOperations.add("myZSet", "d", 8.0);    //取值    Set myZSet = zSetOperations.range("myZSet", 0, -1);    for (String s : myZSet) {        System.out.println(s);    }    //修改分数    zSetOperations.incrementScore("myZSet", "b", 20.0);    //删除成员    zSetOperations.remove("myZSet", "d");}

通用操作:

@Testpublic void testCommon() {    //获取Redis中所有的Key    Set keys = redisTemplate.keys("*");    for (String key : keys) {        System.out.println(key);    }    //判断某个Key是否存在    System.out.println("------------------");    Boolean itcast = redisTemplate.hasKey("itcast");    System.out.println(itcast);    //删除指定Key    redisTemplate.delete("city123");    //获取指定Key对应的value的数据类型    System.out.println("------------------");    DataType dataType = redisTemplate.type("myZSet");    System.out.println(dataType.name());}
转载请注明:文章转载自 http://www.konglu.com/
本文地址:http://www.konglu.com/it/1096661.html
免责声明:

我们致力于保护作者版权,注重分享,被刊用文章【如何在Java中操作Redis】因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理,本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们,情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!

我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2023 成都空麓科技有限公司

ICP备案号:蜀ICP备2023000828号-2