jedis依赖_SpringBoot整合Jedis实现redis缓存

我是一个java开发者,我的文章,没有华丽的言辞,没有666的版式,这些都是我自己工作中用到的解决方案,很多都是直接粘贴的源码,在这里与君分享。如果喜欢这里文章可以关注我,我回继续发的,谢谢你。

我们在使用springboot搭建微服务的时候,在很多时候还是需要redis的高速缓存来缓存一些数据,存储一些高频率访问的数据,如果直接使用redis的话又比较麻烦,在这里,我们使用jedis来实现redis缓存来达到高效缓存的目的,接下来,让我们一起来使用jedis来实现redis缓存

1.在pom.xml文件中添加依赖

redis.clients

jedis

2.8.2

2. 在springboot的配置文件中加入redis的配置信息

#redis jedis配置

# Redis数据库索引(默认为0)

spring.redis.database=0

# Redis服务器地址

spring.redis.host=10.100.140.84

# Redis服务器连接端口

spring.redis.port=6379

# Redis服务器连接密码(默认为空)

#spring.redis.password=

# 连接池最大连接数(使用负值表示没有限制)

spring.redis.pool.max-active=200

# 连接池最大阻塞等待时间(使用负值表示没有限制)

spring.redis.pool.max-wait=-1

# 连接池中的最大空闲连接

spring.redis.pool.max-idle=8

# 连接池中的最小空闲连接

spring.redis.pool.min-idle=0

# 连接超时时间(毫秒)

spring.redis.timeout=0

#spring-session 使用

spring.session.store-type=none

3.创建jedis配置文件

配置文件的作用是在项目启动的时候将jedis注入,接着我们就可以在其他类中获取到JedisPool类的信息

@Configuration

public class JedisConfig extends CachingConfigurerSupport{

private Logger logger = LoggerFactory.getLogger(JedisConfig.class);

/**

* SpringSession 需要注意的就是redis需要2.8以上版本,然后开启事件通知,在redis配置文件里面加上

* notify-keyspace-events Ex

* Keyspace notifications功能默认是关闭的(默认地,Keyspace 时间通知功能是禁用的,因为它或多或少会使用一些CPU的资源)。

* 或是使用如下命令:

* redis-cli config set notify-keyspace-events Egx

* 如果你的Redis不是你自己维护的,比如你是使用阿里云的Redis数据库,你不能够更改它的配置,那么可以使用如下方法:在applicationContext.xml中配置

*

* @return

*/

@Value("${spring.redis.host}")

private String host;

@Value("${spring.redis.port}")

private int port;

@Value("${spring.redis.timeout}")

private int timeout;

@Value("${spring.redis.pool.max-active}")

private int maxActive;

@Value("${spring.redis.pool.max-idle}")

private int maxIdle;

@Value("${spring.redis.pool.min-idle}")

private int minIdle;

@Value("${spring.redis.pool.max-wait}")

private long maxWaitMillis;

@Bean

public JedisPool redisPoolFactory(){

JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();

jedisPoolConfig.setMaxIdle(maxIdle);

jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);

jedisPoolConfig.setMaxTotal(maxActive);

jedisPoolConfig.setMinIdle(minIdle);

JedisPool jedisPool = new JedisPool(jedisPoolConfig,host,port,timeout,null);

logger.info("JedisPool注入成功!");

logger.info("redis地址:" + host + ":" + port);

return jedisPool;

}

}

接下来,我们启动项目,gogogo

d86aee346e624e939c09ec1a62a23083

Jedis注入成功了!!!

然后我们可以定义一个工具类,用于对redis进行各种操作

4115a153c0da4bd99cbc2da8d6dadbca

这里我们通过@Autowired将JedisPool注入到工具类中,其他两个是命名、序列化的类

这里,我们列举一下平常最常用的几个方法

//给某个key设值

public void set(String key, Object value) {

Jedis client = getJedis();

try {

byte[] keyBytes = serializer.serializeKey(keyNamingPolicy.getKeyName(key));

byte[] valueBytes = serializer.serializeValue(value);

client.set(keyBytes, valueBytes);

} finally {

returnJedis(client);

}

}

//根据key获取value

public Object get(String key) {

Jedis client = getJedis();

try {

byte[] keyBytes = serializer.serializeKey(keyNamingPolicy.getKeyName(key));

byte[] valueBytes = client.get(keyBytes);

return serializer.deserializeValue(valueBytes);

} finally {

returnJedis(client);

}

}

//根据键值获取value

public Object hashGet(String key, String field) {

Jedis client = getJedis();

try {

byte[] keyBytes = serializer.serializeKey(keyNamingPolicy.getKeyName(key));

byte[] fieldBytes = serializer.serializeKey(field);

byte[] valueBytes = client.hget(keyBytes, fieldBytes);

return serializer.deserializeValue(valueBytes);

} finally {

returnJedis(client);

}

}

public void hashSet(String key, String field, Object value) {

Jedis client = getJedis();

try {

byte[] keyBytes = serializer.serializeKey(keyNamingPolicy.getKeyName(key));

byte[] fieldBytes = serializer.serializeKey(field);

byte[] valueBytes = serializer.serializeValue(value);

client.hset(keyBytes, fieldBytes, valueBytes);

} finally {

returnJedis(client);

}

}

public Map hashAllGet(String key) {

Jedis client = getJedis();

try {

byte[] keyBytes = serializer.serializeKey(keyNamingPolicy.getKeyName(key));

Map map = client.hgetAll(keyBytes);

Map valueMap = Maps.newHashMap();

Set> valueSet = map.entrySet();

for (Map.Entry entry : valueSet) {

valueMap.put(serializer.deserializeKey(entry.getKey()), serializer.deserializeValue(entry.getValue()));

}

return valueMap;

} finally {

returnJedis(client);

}

}

//判断key是否存在

public boolean existKey(String key) {

Jedis client = getJedis();

try {

byte[] keyBytes = serializer.serializeKey(keyNamingPolicy.getKeyName(key));

return client.exists(keyBytes);

} finally {

returnJedis(client);

}

}

在该项目中,我们发送短信验证码后会将验证码存在redis中去,然后校验的时候会判断用户输入的验证码和缓存中的验证码是否一致,达到目的

a75d4ce1afe546fba514938ccd1519c7
555c14329e7241038d1f32a3fecad805
f3d6c58b587a48ef8b61135ad9a365d4
5e6c5f4a8162469d9c9bcbc8b9ed4a39

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/499026.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件文档 服务器上,服务器上需要什么软件

服务器上需要什么软件 内容精选换一换华为云帮助中心,为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档,帮助您快速上手使用华为云服务。MindStudio所在的环境为开发环境,开发人员可以进…

c++用new求数组中n个数的和_在C++中实现任意大小数组的定义方法

在C中,定义数组的方法一般为:float a[4]; float a[][8];上述定义中,往往需要数组的大小已知,也就是说程序需要事先设定数组的大小。一旦设定的大小不满足需求时,需要修改代码,再重新编译。这种方法显然不太…

python元组创建_如何在Python中创建一个空元组的元组?

如何创建仅包含一个空元组(即(()))的元组? 我尝试了tuple(tuple()),tuple(tuple(tuple())),tuple([])和tuple(tuple([])),它们都给了我()。 我使用这种东西的原因如下:假设您有n个袋子和m个物品。 为了表示包中的项目列…

服务器补丁 系统,操作系统补丁服务器

操作系统补丁服务器 内容精选换一换北京时间1月3日,Intel处理器芯片被曝出存在严重的Meltdown和Spectre安全漏洞,漏洞详情如下:漏洞名称:Intel处理器存在严重芯片级漏洞漏洞编号:CVE-2017-5753、CVE-2017-5715、CVE-20…

python drop_duplicates_Pandas drop_duplicates方法不起作用

如错误消息所示,drop_duplicates不能用于数据帧中的列表。但是,您可以在作为str的数据帧上删除重复项,然后使用结果中的索引从原始df中提取行。设置df pd.DataFrame({Keyword: {0: apply, 1: apply, 2: apply, 3: terms, 4: terms},X: {0: […

matlab 周立功can_隐藏在CAN协议底层的编码方式——到底是大端还是小端?

当我们想要讨论CAN协议底层发送到数据线上的二进制信号的编码方式时,最值得关注的两点是:字节编码(Endianness)和比特顺序(Bit Numbering)。先一句话揭晓答案:CAN协议的字节编码是大端编码&…

samba服务器新建文件权限,Ubuntu中安装samba服务器创建文件共享的方法及普通用户设置共享的问题解析...

Ubuntu中安装samba服务器创建文件共享的方法及普通用户设置共享的问题解析发布时间:2011-01-04 19:10:00 作者:佚名 我要评论本文是基于ubuntu桌面版进行操作说明的。前面的设置都是管理员进行的,这里说的管理员就是可以使用sudo命令&am…

flashpaper打印机没有被正确安装_没有正确保存与安装,可导致80%的轴承提早失效...

轴承损坏可谓司空见惯,可您是否知道,80%的轴承提早失效是因为没有正确地安装。轴承的正确安装,不仅可以增加轴承的使用寿命,降低成本,还可以大大提高生产效益。轴承安装与常规其他部件安装有很大区别,为了实…

语言程序设计第4版黄洪艺_谭浩强《C程序设计》第4版网授精讲班【教材精讲+考研真题串讲】视频网课讲义课程资料...

谭浩强《C程序设计》(第4版)网授精讲班【教材精讲+考研真题串讲】网授课程谭浩强《C程序设计》(第4版)网授精讲班【注:因第11章考试不做要求,所以老师没有讲解!】【共31课时】序号 名…

rabbitmq实例_RabbitMQ不得不知道的点

RabbitMQ的优缺点优点这边的流量削峰功能主要应用在秒杀活动中,在秒杀活动中一般因为流量过大,导致应用挂掉,为了解决这个问题,在应用前端、库存系统前端加入消息队列,在订单系统中,服务器收到用户的请求后…

图片优化_网站里的图片应该如何优化

我们一直都在做网站关键词、内页关键词、标签等。但很多朋友都忽略了网站里的图片如何优化。近年来百度图片识别、360图片识别都在不断升级功能上已经很完善了,所以我们应该对网站图片进行优化,应该做seo的朋友们重视起来, 下面笔者跟大家分享…

rabbitmq 取消消息_mall整合RabbitMQ实现延迟消息

本文主要讲解mall整合RabbitMQ实现延迟消息的过程,以发送延迟消息取消超时订单为例。项目使用框架介绍RabbitMQRabbitMQ是一个被广泛使用的开源消息队列。它是轻量级且易于部署的,它能支持多种消息协议。RabbitMQ可以部署在分布式和联合配置中&#xff0…

vue 将行转换成对象_Vue简化版实现

Vue整体结构Vue: 把data中的成员注入到Vue实例,并且把data中的成员转换成getter, setterObserver: 劫持对象的所有属性, 如有变动可拿最新的值, 通知DepCompiler:解析每一个元素中的指令/插值表达式, 替换成相应的数据Dep: 发布者…

python 如何修改字典的key值_如何使用python技术完成数据集缺失值多种应用场景的滤除或填充?...

前言在数据处理的过程中,我们应该都有这样的体会,本质上数据处理与分析是相互协作,彼此成就的过程。比如,我们会用数据分析统计数据集中的缺失值、异常值,更直观的也会进阶到数据可视化的部分(到达该部分一般是成了文章…

vue 接口节流_vue防抖节流之v-debounce--throttle使用指南

最新封装了一个vue防抖节流自定义指令,发布到npm上,有用欢迎star,谢谢!使用比较简单,取消利用vue注册事件,采用指令来注册事件,防抖指令v-debounce,节流指令v-debounce,使用方式分为两种,传入对…

python graphics 清空 图_【手把手教你】使用Python玩转金融时间序列模型

01引言上一篇推文【Python量化基础】时间序列的自相关性与平稳性着重介绍了时间序列的一些基础概念,包括自相关性、偏自相关性、白噪声和平稳性,以及Python的简单实现。本文在此基础上,以沪深300指数收益率数据为例,探讨如何使用P…

mysql按字段同步_MySQL同步(一) 基础知识

6 MySQL 同步同步功能在MySQL 3.23.15就开始引进了,它可以把一个MySQL服务器上的数据复制到另一个服务器上去。本章描述了MySQL的各种复制特性。介绍了同步的概念,如何设置同步服务器,以及可用服务器的参照。还提供了一系列的常见问题及其答案…

postman linux_Postman使用

postman简介官网https://learning.getpostman.com/用户在开发或者调试网络程序或者是网页B/S模式的程序的时候是需要一些方法来跟踪网页请求的,用户可以使用一些网络的监视工具比如著名的Firebug等网页调试工具。今天给大家介绍的这款网页调试工具不仅可以调试简单的…

java与MySQL做购物系统_java Swing mysql实现简单的购物系统项目源码附带指导视频教程...

大家好,今天给大家演示一下由Java swing实现的一款简单的购物程序,数据库采用的是mysql,该项目非常简单,实现了管理员对商品类型和商品的管理及用户注册登录后浏览商品、加入购物车、购买商品等功能,旨在学习Java 图形…

mysql pdm_mysql 生成pdm

1.条件1.1 工具powerDesigner16.51.2 mysql数据库地址或脚本1.3 mysql-connector-odbc-5.3.4-winx64.msi2.操作步骤2.1 database > change DBMS 选择Mysql5.02.2 打开powerDesigner16.5工具, file > reverse Engineer > database确定,则生成对应的pdm.3.图形列表中展示…