Spring Data Redis 在Java中操作Redis

这篇具有很好参考价值的文章主要介绍了Spring Data Redis 在Java中操作Redis。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1. 添加依赖  

2. 配置连接信息

3. 配置 RedisConnectionFactory 和 RedisTemplate

4.在Java中操作Redis

4.1. String 类型操作

4.2 List 类型操作

4.3 Set 类型操作

4.4 Hash类型操作

4.5 sorted set类型操作

 


 

Spring Data Redis 是 Spring Data 项目的一部分,它为 Java 应用程序提供了在 Spring 环境中与 Redis 数据库进行交互的便捷方式。通过 Spring Data Redis,可以利用自动配置、模板类(RedisTemplate)、Repository 接口以及对 Redis 数据结构的支持来简化开发工作。

   1. 添加依赖  

在 Maven 或 Gradle 构建文件中添加 Spring Data Redis 依赖。

   <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-data-redis</artifactId>
   </dependency>

2. 配置连接信息

   # application.yml
   spring:
     redis:
       host: localhost
       port: 6379

3. 配置 RedisConnectionFactory 和 RedisTemplate

Spring Boot 自动配置会创建一个 RedisConnectionFactory 实例和默认的 RedisTemplate。如果需要自定义序列化器或配置其他选项,可以自己配置:

   @Configuration
   public class RedisConfig {

       @Bean
       public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
           RedisTemplate<String, Object> template = new RedisTemplate<>();
           template.setConnectionFactory(factory);

           // 设置 key 和 value 的序列化器
           Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<>(Object.class);
           ObjectMapper objectMapper = new ObjectMapper();
           objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
           objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
           serializer.setObjectMapper(objectMapper);

           StringRedisSerializer stringSerializer = new StringRedisSerializer();
           // key 采用 String 序列化
           template.setKeySerializer(stringSerializer);
           // hash 的 key 也采用 String 序列化
           template.setHashKeySerializer(stringSerializer);
           // value 采用 JSON 序列化
           template.setValueSerializer(serializer);
           // hash 的 value 采用 JSON 序列化
           template.setHashValueSerializer(serializer);

           return template;
       }
   }

 文章来源地址https://www.toymoban.com/news/detail-802082.html

4.在Java中操作Redis

4.1. String 类型操作

import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;

@Autowired
private StringRedisTemplate redisTemplate;

// 1. 设置(保存)字符串值
public void setStringValue(String key, String value) {
    ValueOperations<String, String> operations = redisTemplate.opsForValue();
    operations.set(key, value);
}

// 2. 获取字符串值
public String getStringValue(String key) {
    ValueOperations<String, String> operations = redisTemplate.opsForValue();
    return operations.get(key);
}

// 3. 自增操作(如果key不存在,则默认设置为0再进行自增)
public Long increment(String key) {
    return redisTemplate.opsForValue().increment(key);
}

// 4. 自减操作
public Long decrement(String key) {
    return redisTemplate.opsForValue().decrement(key);
}

// 5. 设置带过期时间的键值对
public void setExpiryKeyValue(String key, String value, long timeout, TimeUnit timeUnit) {
    redisTemplate.opsForValue().set(key, value, timeout, timeUnit);
}

// 6. 获取字符串长度
public Long stringLength(String key) {
    return redisTemplate.opsForValue().size(key);
}

// 7. 追加字符串到已存在的key后
public Long appendToKey(String key, String value) {
    return redisTemplate.opsForValue().append(key, value);
}

4.2 List 类型操作

import org.springframework.data.redis.core.ListOperations;
import org.springframework.data.redis.core.RedisTemplate;

@Autowired
private RedisTemplate<String, Object> redisTemplate;

// 1. 将元素添加到列表的头部(左侧)
public void addToListHead(String key, Object value) {
    ListOperations<String, Object> listOps = redisTemplate.opsForList();
    listOps.leftPush(key, value);
}

// 2. 将元素添加到列表的尾部(右侧)
public void addToListTail(String key, Object value) {
    ListOperations<String, Object> listOps = redisTemplate.opsForList();
    listOps.rightPush(key, value);
}

// 3. 从列表头部弹出一个元素并返回
public Object popFromListHead(String key) {
    ListOperations<String, Object> listOps = redisTemplate.opsForList();
    return listOps.leftPop(key);
}

// 4. 从列表尾部弹出一个元素并返回
public Object popFromListTail(String key) {
    ListOperations<String, Object> listOps = redisTemplate.opsForList();
    return listOps.rightPop(key);
}

// 5. 获取列表指定范围内的元素(左闭右开区间 [start, end))
public List<Object> getRangeFromList(String key, long start, long end) {
    ListOperations<String, Object> listOps = redisTemplate.opsForList();
    return listOps.range(key, start, end);
}

// 6. 删除列表中与给定值相等的所有元素
public Long removeElementsByValueFromList(String key, Object value) {
    ListOperations<String, Object> listOps = redisTemplate.opsForList();
    return listOps.remove(key, 0, value); // 参数0表示删除所有匹配项
}

// 7. 在列表的某个索引位置插入元素
public void insertElementAtPosition(String key, int index, Object value) {
    ListOperations<String, Object> listOps = redisTemplate.opsForList();
    listOps.set(key, index, value);
}

4.3 Set 类型操作

import org.springframework.data.redis.core.SetOperations;
import org.springframework.data.redis.core.RedisTemplate;

@Autowired
private RedisTemplate<String, Object> redisTemplate;

// 1. 添加元素到集合中(如果元素已存在,则不添加)
public Long addToSet(String key, Object... values) {
    SetOperations<String, Object> setOps = redisTemplate.opsForSet();
    return setOps.add(key, values);
}

// 2. 从集合中移除指定元素
public Long removeFromSet(String key, Object... values) {
    SetOperations<String, Object> setOps = redisTemplate.opsForSet();
    return setOps.remove(key, values);
}

// 3. 判断元素是否存在于集合中
public Boolean isMemberOfSet(String key, Object value) {
    SetOperations<String, Object> setOps = redisTemplate.opsForSet();
    return setOps.isMember(key, value);
}

// 4. 获取集合中的所有元素
public Set<Object> getMembersFromSet(String key) {
    SetOperations<String, Object> setOps = redisTemplate.opsForSet();
    return setOps.members(key);
}

// 5. 计算两个集合的交集,并存储到新的key中
public Long intersectAndStoreSets(String destinationKey, String... keys) {
    SetOperations<String, Object> setOps = redisTemplate.opsForSet();
    return setOps.intersectAndStore(destinationKey, keys);
}

// 6. 计算两个集合的并集,并存储到新的key中
public Long unionAndStoreSets(String destinationKey, String... keys) {
    SetOperations<String, Object> setOps = redisTemplate.opsForSet();
    return setOps.unionAndStore(destinationKey, keys);
}

// 7. 计算两个集合的差集,并存储到新的key中
public Long differenceAndStoreSets(String destinationKey, String key1, String key2) {
    SetOperations<String, Object> setOps = redisTemplate.opsForSet();
    return setOps.differenceAndStore(destinationKey, Collections.singletonList(key1), Collections.singletonList(key2));
}

4.4 Hash类型操作

import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;

@Autowired
private RedisTemplate<String, Object> redisTemplate;

// 1. 设置Hash中的字段值
public void setHashField(String key, String field, Object value) {
    HashOperations<String, String, Object> hashOps = redisTemplate.opsForHash();
    hashOps.put(key, field, value);
}

// 2. 获取Hash中指定字段的值
public Object getHashFieldValue(String key, String field) {
    HashOperations<String, String, Object> hashOps = redisTemplate.opsForHash();
    return hashOps.get(key, field);
}

// 3. 获取整个Hash的所有字段和值
public Map<Object, Object> getAllHashFields(String key) {
    HashOperations<String, String, Object> hashOps = redisTemplate.opsForHash();
    return hashOps.entries(key);
}

// 4. 删除Hash中一个或多个字段
public Long deleteHashFields(String key, Object... fields) {
    HashOperations<String, String, Object> hashOps = redisTemplate.opsForHash();
    return hashOps.delete(key, fields);
}

// 5. 判断Hash中是否存在某个字段
public Boolean hasHashField(String key, String field) {
    HashOperations<String, String, Object> hashOps = redisTemplate.opsForHash();
    return hashOps.hasKey(key, field);
}

// 6. 批量设置多个字段值
public void putAllInHash(String key, Map<String, Object> map) {
    HashOperations<String, String, Object> hashOps = redisTemplate.opsForHash();
    hashOps.putAll(key, map);
}

4.5 sorted set类型操作

import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.data.redis.core.RedisTemplate;

@Autowired
private RedisTemplate<String, Object> redisTemplate;

// 1. 向有序集合添加成员并设置分数
public Long addToSortedSet(String key, Object value, double score) {
    ZSetOperations<String, Object> zSetOps = redisTemplate.opsForZSet();
    return zSetOps.add(key, value, score);
}

// 2. 根据分数范围获取有序集合中的成员
public Set<Object> getRangeFromSortedSetByScore(String key, double min, double max) {
    ZSetOperations<String, Object> zSetOps = redisTemplate.opsForZSet();
    return zSetOps.rangeByScore(key, min, max);
}

// 3. 获取有序集合中指定索引范围内的成员
public Set<Object> getRangeFromSortedSet(String key, long start, long end) {
    ZSetOperations<String, Object> zSetOps = redisTemplate.opsForZSet();
    return zSetOps.range(key, start, end);
}

// 4. 删除有序集合中的指定成员
public Long removeFromSortedSet(String key, Object... values) {
    ZSetOperations<String, Object> zSetOps = redisTemplate.opsForZSet();
    return zSetOps.remove(key, values);
}

// 5. 获取有序集合中成员的分数
public Double getScoreInSortedSet(String key, Object value) {
    ZSetOperations<String, Object> zSetOps = redisTemplate.opsForZSet();
    return zSetOps.score(key, value);
}

// 6. 更新有序集合中成员的分数
public Long updateScoreInSortedSet(String key, Object value, double newScore) {
    ZSetOperations<String, Object> zSetOps = redisTemplate.opsForZSet();
    return zSetOps.incrementScore(key, value, newScore - zSetOps.score(key, value)); // 增量更新,避免多次查询
}

// 7. 计算两个有序集合的交集,并存储到新的key中
public Long intersectAndStoreSortedSets(String destinationKey, String... keys) {
    ZSetOperations<String, Object> zSetOps = redisTemplate.opsForZSet();
    return zSetOps.intersectAndStore(destinationKey, Arrays.asList(keys));
}

// 8. 计算两个有序集合的并集,并存储到新的key中
public Long unionAndStoreSortedSets(String destinationKey, String... keys) {
    ZSetOperations<String, Object> zSetOps = redisTemplate.opsForZSet();
    return zSetOps.unionAndStore(destinationKey, Arrays.asList(keys));
}

 

到了这里,关于Spring Data Redis 在Java中操作Redis的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Data Redis的使用

    解决方法为在Redis-x64-3.2.100目录下打开两个cmd窗口,分别输入 命令redis-server.exe redis.windows.conf 和 命令redis-cli ,即可成功连接。   首先在maven的pom文件中引入 Spring Data Redis 模块,代码如下。 然后,在springboot的配置文件中写入redis配置,代码如下。 然后,处理keys的序列化问题

    2024年02月09日
    浏览(42)
  • 【Java Web】利用Spring整合Redis,配置RedisTemplate

    1. 在config中加入RedisConfig配置类 2. 写个测试类测试一下 3. 注意事项 Redis不满足事务的原子性,原子性是指事务要么被全部执行,要么都不执行。但是Redis不支持回滚,就可能会出现有些语句执行成功,有些执行失败,因此具备原子性; Redis事务的三个阶段: 开始事务 命令入

    2024年02月09日
    浏览(45)
  • Spring Data Redis切换底层Jedis 和 Lettuce实现

    Spring Data Redis是 Spring Data 系列的一部分,它提供了Spring应用程序对Redis的轻松配置和使用。它不仅提供了对Redis操作的高级抽象,还支持Jedis和Lettuce两种连接方式。 可通过简单的配置就能连接Redis,并且可以切换Jedis和Lettuce两个连接方式。下面先来看看我们该如何使用它。 使

    2024年02月05日
    浏览(39)
  • Java--业务场景:在Spring项目启动时加载Java枚举类到Redis中(补充)

    前言 通过Java–业务场景:在Spring项目启动时加载Java枚举类到Redis中,我们成功将Java项目里的枚举类加载到Redis中了,接下来我们只需要写接口获取需要的枚举值数据就可以了,下面一起来编写这个接口吧。 步骤 在EnumService接口创建一个方法,负责查询枚举类的值,供接口调用

    2024年01月25日
    浏览(37)
  • Spring Data Redis + RabbitMQ - 基于 string 实现缓存、计数功能(同步数据)

    目录 一、Spring Data Redis 1.1、缓存功能 1.1.1、分析 1.1.2、案例实现 1.1.3、效果演示 1.2、计数功能(Redis + RabbitMQ) 1.2.1、分析 1.2.2、案例实现 1.1.1、分析 使用 redis 作为缓存, MySQL 作为数据库组成的架构 整体思路: 应用服务器访问数据的时候,先查询 Redis,如果 Redis 上存在该

    2024年02月05日
    浏览(36)
  • Java版企业电子招标采购系统源码Spring Cloud + Spring Boot +二次开发+ MybatisPlus + Redis

    功能描述 1、门户管理:所有用户可在门户页面查看所有的公告信息及相关的通知信息。主要板块包含:招标公告、非招标公告、系统通知、政策法规。 2、立项管理:企业用户可对需要采购的项目进行立项申请,并提交审批,查看所有的立项信息。主要功能包含:招标立项申

    2024年02月09日
    浏览(57)
  • java 企业工程管理系统软件源码+Spring Cloud + Spring Boot +二次开发+ MybatisPlus + Redis

      工程项目管理软件(工程项目管理系统)对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营,全过程、全方位的对项目进行综合管理    工程项目各模块及其功能点清单 一、系统管理     1、数据字典:实现对数据字典

    2024年02月10日
    浏览(57)
  • Spring Cloud项目后台报错:org.springframework.data.redis.RedisSystemException(Redis-6.2.6 CentOS 7)

            1.1、报错          org.springframework.data.redis.RedisSystemException: Error in execution; nested exception is io.lettuce.core.RedisCommandExecutionException: MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk. Commands that may modify the data set are disabled, because this instance

    2024年02月07日
    浏览(40)
  • Spring Data Redis + RabbitMQ - 基于 string + hash 实现缓存,计数(高内聚)

    目录 一、Spring Data Redis 1.1、缓存功能(分析) 1.2、案例实现 hash 类型存储缓存相比于 string 类型就有更多的更合适的使用场景. 例如,我有以下这样一个 UserInfo 信息  假设这样一个场景就是:

    2024年02月05日
    浏览(46)
  • Java Web现代化开发:Spring Boot + Mybatis + Redis二级缓存

    Spring-Boot因其提供了各种开箱即用的插件,使得它成为了当今最为主流的Java Web开发框架之一。Mybatis是一个十分轻量好用的ORM框架。Redis是当今十分主流的分布式key-value型数据库,在web开发中,我们常用它来缓存数据库的查询结果。 本篇博客将介绍如何使用Spring-Boot快速搭建一

    2024年01月17日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包