redis只存入一次

embedded/2024/11/14 5:51:12/

在Spring框架中使用Redis Data,可以通过注入 RedisTemplate 或 StringRedisTemplate 来操作Redis。

首先,在pom.xml 中添加了Spring Boot Redis的依赖:

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

然后,创建一个配置类来配置RedisTemplate,并设置序列化,我们使用了 StringRedisSerializer 来序列化Redis的键,而值则使用了 GenericJackson2JsonRedisSerializer 来序列化,这是一种将对象序列化为JSON格式的序列化器。

@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, Object> template = new RedisTemplate<>();template.setConnectionFactory(factory);// 使用StringRedisSerializer来序列化和反序列化redis的key值template.setKeySerializer(new StringRedisSerializer());// 使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(对象)template.setValueSerializer(new GenericJackson2JsonRedisSerializer());// 设置hash key 和value序列化模式template.setHashKeySerializer(new StringRedisSerializer());template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());// 设置默认的序列化方式template.setDefaultSerializer(new GenericJackson2JsonRedisSerializer());// 初始化参数template.afterPropertiesSet();return template;}
}

在Spring中,你可以使用Redis的 SETNX命令来确保一个键只被设置一次,如果键已经存在,则命令不会执行任何操作。

@Component
public class RedisUniqueSetter {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;public boolean setIfAbsent(String key, Object value) {return redisTemplate.opsForValue().setIfAbsent(key, value);}
}

setIfAbsent 方法使用了 RedisTemplate 的 opsForValue().setIfAbsent 方法,该方法对应于Redis的 SETNX 命令。如果键不存在,它会设置键值对并返回 true ,如果键已经存在,则不会进行任何操作并返回 false 。

public class RedisService {@Autowiredprivate RedisUniqueSetter redisUniqueSetter;public void someMethod() {String key = "uniqueKey";Object value = "uniqueValue";// 尝试设置键值对,如果键已经存在,则不会进行任何操作boolean isSet = redisUniqueSetter.setIfAbsent(key, value);if (isSet) {System.out.println("t");} else {System.out.println("f");}}
}

 
这样,你就可以确保即使有多个存入请求,键也只会被设置一次。


http://www.ppmy.cn/embedded/137047.html

相关文章

达梦8-达梦数据实时同步软件(DMHS)配置-Oracle-DM8

1、安装环境 源端目的端IP地址192.168.6.111192.168.6.110系统版本Red Hat 6.4Kylin v10数据库版本Oracle11g达梦 v8系统用户Oracledmdba字符集MERICAN_AMERICA.AL32UTF8UTF-8端口15215236实例名PRODDMSERVER数据库软件目录/u01/app/oracle/opt/dmdbmsDMHS安装目录/u01/dmhs/o…

网络安全新前沿:防御策略与技术革新

网络安全新前沿&#xff1a;防御策略与技术革新 在数字化时代&#xff0c;网络安全已成为个人、企业乃至国家层面的首要关切。随着网络攻击的日益复杂和频繁&#xff0c;传统的防御措施已不足以应对当前的威胁。本文将探讨网络安全的新前沿&#xff0c;包括最新的防御策略和技…

误差作业(全)

题目&#xff1a;利用水库的水位变化预测大坝的出水量 代码&#xff1a; import numpy as np import scipy.io as sio import matplotlib.pyplot as plt from scipy.optimize import minimizedef linear(): # 线性回归fig, ax plt.subplots()ax.scatter(X_train[:, 1], y_tr…

sqoop Oracle 导入到hive 日期时间消失

sqoop脚本&#xff1a; sqoop import -D mapred.job.queue.namehighway \ -D mapreduce.map.memory.mb4096 \ -D mapreduce.map.java.opts-Xmx3072m \ --connect "jdbc:oracle:thin://localhost:61521/LZY2" \ --username LZSHARE \ --password 123456 \ --query &q…

海量数据迁移:Elasticsearch到OpenSearch的无缝迁移策略与实践

文章目录 一&#xff0e;迁移背景二&#xff0e;迁移分析三&#xff0e;方案制定3.1 使用工具迁移3.2 脚本迁移 四&#xff0e;方案建议 一&#xff0e;迁移背景 目前有两个es集群&#xff0c;版本为5.2.2和7.16.0&#xff0c;总数据量为700T。迁移过程需要不停服务迁移&#…

数据结构选择题及答案

一、选择题 1、下列查找方法中&#xff0c;&#xff08; &#xff09;适用于查找有序单链表。 A&#xff0e;分块查找; B&#xff0e;哈希查找; C&#xff0e;顺序查找; D&#xff0e;二分查找; 2、在有n个结点的二叉树的二叉链表表示中&#xff0c;空指针数为( )。 A&#xf…

数据结构-并查集专题(2)

一、前言 接&#xff08;1&#xff09;完成剩余题目和了解并查集运用求解最小生成树的Kruskal算法 二、专题训练 2.1 题目总览 前四题见&#xff08;1&#xff09; 2.2 1568: 并查集-家谱 思路 首先这个题目的描述就有问题&#xff0c;它说每一组的父子关系由两行组成&…

cv::intersectConvexConvex返回其中一个输入点集,两个点集不相交

问题&#xff1a;cv::intersectConvexConvex返回其中一个输入点集&#xff0c;但两个点集并不相交 版本&#xff1a;opencv 3.1.0 git上也有人反馈了intersectConvexConvex sometimes returning one of the input polygons in case of empty intersection #10044 是凸包嵌套判…