SpringBoot系列十:SpringBoot整合Redis

From: https://www.cnblogs.com/leeSmall/p/8728231.html

声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅。

1、概念:SpringBoot 整合 Redis 

2、背景

Redis 的数据库的整合在 java 里面提供的官方工具包:jedis,所以即便你现在使用的是 SpringBoot,那么也继续使用此开发包。

2.1、RedisTemplate 模版操作

在 Spring 支持的 Redis 操作之中提供有一个 RedisTemplate 处理程序类,利用这个类可以非常方便的实现 Redis 的各种基本数 据操作。

1、 修改项目中的 pom.xml 配置文件,追加 redis 的依赖引用:

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

2、 如果要想使用 Redis 操作,则一定要修改 application.yml 配置文件,在这个配置文件之中要进行 Redis 的各种连接配置处理;

复制代码

spring:redis:host: 192.168.68.166port: 6379password: studyjavatimeout: 1000database: 0pool:max-active: 10max-idle: 8min-idle: 2max-wait: 100

复制代码

3、 下面就可以通过程序来利用 RedisTemplate 模版进行数据处理了,因为以上的配置一旦完成之后会在 Spring 内部帮助用户直接 获得一个 RedisTemplate 模版处理对象,为了简单,直接建立一个测试类完成:

复制代码

package cn.study.microboot;
import javax.annotation.Resource;import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
@SpringBootTest(classes = StartSpringBootMain.class)
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
public class TestRedis {@Resourceprivate RedisTemplate<String, String> redisTemplate;@Testpublic void testSet() {this.redisTemplate.opsForValue().set("study", "java");System.out.println(this.redisTemplate.opsForValue().get("study"));}
}

复制代码

则此时就可以利用 Redis 实现在 SpringBoot 中的数据存储操作了。

2.2、Redis 对象序列化操作

虽然以上的代码实现了 Redis 基础的数据操作,但是遗憾的是在 Java 开发领域内必须要考虑一个实际的问题,那么就是对象 的序列化保存问题,毕竟 Redis 数据库的读写速度是非常快的,但是如果不能够进行对象的存储,这样的存储意义就不大了,这样 就需要准备一个对象的序列化处理程序类,通过对象的形式进行数据的存储。

1、 如果要想进行 Redis 对象序列化操作则一定要首先准备一个序列化处理程序类,这个程序类有实现要求:

复制代码

package cn.study.microboot.util.redis;import org.springframework.core.convert.converter.Converter;
import org.springframework.core.serializer.support.DeserializingConverter;
import org.springframework.core.serializer.support.SerializingConverter;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.SerializationException;
// 此时定义的序列化操作表示可以序列化所有类的对象,当然,这个对象所在的类一定要实现序列化接口
public class RedisObjectSerializer implements RedisSerializer<Object> {// 为了方便进行对象与字节数组的转换,所以应该首先准备出两个转换器private Converter<Object, byte[]> serializingConverter = new SerializingConverter();private Converter<byte[], Object> deserializingConverter = new DeserializingConverter();private static final byte[] EMPTY_BYTE_ARRAY = new byte[0];    // 做一个空数组,不是null@Overridepublic byte[] serialize(Object obj) throws SerializationException {if (obj == null) {    // 这个时候没有要序列化的对象出现,所以返回的字节数组应该就是一个空数组return EMPTY_BYTE_ARRAY ;}return this.serializingConverter.convert(obj);    // 将对象变为字节数组}@Overridepublic Object deserialize(byte[] data) throws SerializationException {if (data == null || data.length == 0) {    // 此时没有对象的内容信息return null ;}return this.deserializingConverter.convert(data);}}

复制代码

2、 此时如果要想让 RedisTemplate 操作模版知道有这样一个序列化程序类存在,那么就不能够采用 RedisTemplate 默认配置形式, 需要准备一个单独的配置类进行处理:

复制代码

package cn.study.microboot.config;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;import cn.study.microboot.util.redis.RedisObjectSerializer;@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<String, Object> getRedisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();redisTemplate.setConnectionFactory(factory);redisTemplate.setKeySerializer(new StringRedisSerializer()); // key的序列化类型redisTemplate.setValueSerializer(new RedisObjectSerializer()); // value的序列化类型return redisTemplate;}
}

复制代码

3、 进行程序的测试使用:

复制代码

package cn.study.microboot.vo;import java.io.Serializable;@SuppressWarnings("serial")
public class Member implements Serializable {private String mid;private Integer age;public String getMid() {return mid;}public void setMid(String mid) {this.mid = mid;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {return "Member [mid=" + mid + ", age=" + age + "]";}
}

复制代码

复制代码

package cn.study.microboot;
import javax.annotation.Resource;import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;import cn.mldn.microboot.vo.Member;
@SpringBootTest(classes = StartSpringBootMain.class)
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
public class TestRedis {@Resourceprivate RedisTemplate<String, Object> redisTemplate;@Test public void testGet() {System.out.println(this.redisTemplate.opsForValue().get("study"));}@Testpublic void testSet() {Member vo = new Member() ;vo.setMid("studyjava");vo.setAge(19);this.redisTemplate.opsForValue().set("study", vo);;}
}

复制代码

此时可以进行对象的序列化保存处理, 这样整体的数据存储的手段可以更加的丰富。

2.3、配置多个 RedisTemplate

由于在项目的实际开发过程之中 Redis 的使用会非常的频繁, 那么就有可能出现这样一种问题:现在的项目里面要求连接两 个 Redis 数据库。SpringBoot 里面针对于 Redis 的连接配置本质上只提供有一个连接配置项,那么如果你真的需要进行更多的 Redis 的连接配置,那么就需要自己来进行 Redis 的创建管理了。

1、 以非正规的形式修改 application.yml 配置文件:

复制代码

spring:redis:host: 192.168.68.166port: 6379password: studyjavatimeout: 1000database: 0pool:max-active: 10max-idle: 8min-idle: 2max-wait: 100redis-two:host: 192.168.68.166port: 6380password: studyjavatimeout: 1000database: 0pool:max-active: 10max-idle: 8min-idle: 2max-wait: 100

复制代码

2、 建立一个 RedisTwoConfig 的程序配置类,进行第二个 Redis 连接的配置处理:

复制代码

package cn.study.microboot.config;import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;import cn.study.microboot.util.redis.RedisObjectSerializer;
import redis.clients.jedis.JedisPoolConfig;@Configuration
public class RedisTwoConfig {public RedisConnectionFactory getRedisConnectionFactory(String hostName,String password, int port, int maxActive, int maxIdle, int minIdle,long maxWait, int database) { // 是负责建立Factory的连接工厂类JedisConnectionFactory jedisFactory = new JedisConnectionFactory();jedisFactory.setHostName(hostName);jedisFactory.setPort(port);jedisFactory.setPassword(password);jedisFactory.setDatabase(database);JedisPoolConfig poolConfig = new JedisPoolConfig(); // 进行连接池配置poolConfig.setMaxTotal(maxActive);poolConfig.setMaxIdle(maxIdle);poolConfig.setMinIdle(minIdle);poolConfig.setMaxWaitMillis(maxWait);jedisFactory.setPoolConfig(poolConfig);jedisFactory.afterPropertiesSet(); // 初始化连接池配置return jedisFactory;}@Bean("redisTwo")public RedisTemplate<String, Object> getRedisTemplate(@Value("${spring.redis-two.host}") String hostName,@Value("${spring.redis-two.password}") String password,@Value("${spring.redis-two.port}") int port,@Value("${spring.redis-two.database}") int database,@Value("${spring.redis-two.pool.max-active}") int maxActive,@Value("${spring.redis-two.pool.max-idle}") int maxIdle,@Value("${spring.redis-two.pool.min-idle}") int minIdle,@Value("${spring.redis-two.pool.max-wait}") long maxWait) {RedisConnectionFactory factory = this.getRedisConnectionFactory(hostName, password, port, maxActive, maxIdle, minIdle, maxWait,database); // 建立Redis的连接RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();redisTemplate.setConnectionFactory(factory);redisTemplate.setKeySerializer(new StringRedisSerializer()); // key的序列化类型redisTemplate.setValueSerializer(new RedisObjectSerializer()); // value的序列化类型return redisTemplate;}
}

复制代码

3、 编写测试程序类:

复制代码

package cn.study.microboot;
import javax.annotation.Resource;import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;import cn.study.microboot.vo.Member;
@SpringBootTest(classes = StartSpringBootMain.class)
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
public class TestRedisTwo {@Resource(name="redisTwo")private RedisTemplate<String, Object> redisTemplate;@Test public void testGet() {System.out.println(this.redisTemplate.opsForValue().get("study"));}@Testpublic void testSet() {Member vo = new Member() ;vo.setMid("studyjava");vo.setAge(19);this.redisTemplate.opsForValue().set("study", vo);;}
}

复制代码

在实际的工作之中由于 Redis 数据库的使用相当频繁,所以有很大的可能性是一个项目里面需要连接不同的 Redis 数据库。

3、总结

Redis 是一个重要的数据库产品,实际开发之中会利用 Redis 实现高并发的信息存储,所以多个 Redis 数据库的使用是一种常 见形式。

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

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

相关文章

海贼王革命家—龙—实力到底如何?

龙——整个海贼王世界中最神秘的人物&#xff0c;令世界政府最担心的存在&#xff0c;是所有迷最为期待的实力展现&#xff0c;他的身上好像有着无数的秘密等着尾田为我们揭晓。 路飞的父亲——未来的海贼王、卡普的儿子——海军英雄、革民军首领——唯一可以跟世界政府抗衡的组…

python模块介绍- xlwt 创建xls文件(excel)

python模块介绍- xlwt 创建xls文件&#xff08;excel&#xff09; 2013-06-24磁针石 #承接软件自动化实施与培训等gtalk&#xff1a;ouyangchongwu#gmail.comqq 37391319 博客:http://blog.csdn.net/oychw #版权所有&#xff0c;转载刊登请来函联系 # 深圳测试自动化python项目…

SpringBoot(六):SpringBoot整合Redis

From: https://blog.csdn.net/plei_yue/article/details/79362372 前言 在本篇文章中将SpringBoot整合Redis&#xff0c;使用的是RedisTemplate&#xff0c;分别实现了SpringBoot与redis的单机版、集群版、哨兵模式的整合。 Maven依赖 <!-- 整合redis --> <…

[4]Telerik Grid 简单使用方法

1.columns <% Html.Telerik().Grid(Model).Name("Orders").Columns(columns >{//绑定列名columns.Bound(o > o.OrderID);//隐藏字段columns.Bound(o > o.OrderID).Hidden(true); //绑定列标题 columns.Bound(o > o.OrderDate).Title("…

Springboot 2.x版本 RedisCacheManager 类的配置,【与1.x 略有不同】

From: https://blog.csdn.net/qq_15071263/article/details/82897330 文章目录 Springboot 2.x版本 RedisCacheManager 类的配置&#xff0c;【与1.x 略有不同】 1、1.x 配置方式 2、2.x 配置方式 Springboot 2.x版本 RedisCacheMan…

.net应用程序中添加chm帮助文档打开显示此程序无法显示网页问题

在做.net大作业时添加了chm帮助文档结果在打开时显示“此程序无法显示网页问题”&#xff0c;但是把帮助文档拷到别的路径下却显示正常&#xff0c; 经过从网上查找&#xff0c;终于找到了答案&#xff1a; (1)、chm文件的路径中不能含有“#”“%”等字符&#xff0c;当含有这些…

新磁盘创建lvm并挂载

1 ### 1.查看硬盘2 fdisk -l3 4 ### 删除分区5 fdisk /dev/sdc6 ### 按d删除&#xff0c;按w保存并退出7 8 ### 创建pv9 pvcreate /dev/sdc 10 11 ### 创建 vg 12 vgcreate vg_hdp /dev/sdc 13 14 ### 创建 lv 15 lvcreate -L 200G -n lv_hdp vg_hdp 16 17 ### 格式化 lv 18…

用unison来同步你的远程文件夹 - Fwolf's Blog

用unison来同步你的远程文件夹 - Fwolfs Blog: "" (Via.)转载于:https://www.cnblogs.com/devops/p/3157101.html

MyBatis 实践

From&#xff1a; https://www.cnblogs.com/luyiba/p/6303717.html MyBatis简介 MyBatis前身是iBatis,是一个基于Java的数据持久层/对象关系映射(ORM)框架. MyBatis是对JDBC的封装,使开发人员只需关注SQL本身,而不需花费过多的精力去处理如注册驱动、设置参数、创建Connectio…

皮克斯背后新技术

2019独角兽企业重金招聘Python工程师标准>>> 皮克斯每创作一部动画作品总会给观众带来或多或少的惊喜&#xff0c;而很多影视动画从业人员也习惯于关注他们的每一部作品的制作&#xff0c;因为新技术往往就在这些制作过程中诞生&#xff0c;如今皮克斯动画已经成为C…

@Retention注解

From: https://blog.csdn.net/asdgbc/article/details/70196749 日常开发中经常用到注解&#xff0c;所以也会经常使用到Retention注解&#xff0c;写下这篇文章做个记。 Reteniton的作用是定义被它所注解的注解保留多久&#xff0c;一共有三种策略&#xff0c;定义在Retentio…

[翻译]:怎样从C/C++代码中对C#进行回调

声明:网络上类似的中文博客大有存在&#xff0c;本人知识水平有限&#xff0c;业余爱好&#xff0c;也是为了备份收藏How to make a callback to C# from C/C code 本着共享知识的初衷&#xff0c;翻译一份给大家参考&#xff0c;为了便于阅读不至于拗口&#xff0c;没有按照原…

android thread实例

http://blog.csdn.net/awebkit/article/details/6982748

Linux Centos关机命令

centos关机命令&#xff1a; 1、halt 立马关机 2、shutdown -h 10 1分钟后自动关机 3、poweroff 立刻关机,并且电源也会断掉 4、shutdown -h now 立刻关机(root用户使用) 如果是通过shutdown命令设置关机的话&#xff0c;可以用shutdown -c命令取消重启转载于:https://www.cnbl…

RedisTemplate和StringRedisTemplate使用

From: https://blog.csdn.net/qiesheng/article/details/83897634 //向redis里存入数据和设置缓存时间 stringRedisTemplate.opsForValue().set("test", "100",60*10,TimeUnit.SECONDS); //val做-1操作 stringRedisTemplate.boundValueOps("test&q…

linux中yum搭建与配置

服务器配置&#xff1a;1、把光盘中的内容全部拷到/var/ftp/Server/中mount /dev/cdrom /mnt //挂载光盘rpm -ivh /mnt/Packages/vsftpd-2.2.2-11.el6.i686.rpm //安装vsftpd cp -rf /mnt/Packages /var/ftp/Server //复制光盘rpm包到本地2、安装createreporpm -…

数据结构:二叉查找树(C语言实现)

数据结构&#xff1a;二叉查找树 二叉查找树 基础知识 关于二叉树的基础知识&#xff0c;请看我的一篇博客:二叉树的链式存储 二叉查找树的特征 二叉查找树或者是一棵空树&#xff0c;或者是具有下列性质的二叉树&#xff1a;  1.若其左子树不空&#xff0c;则左子树上所有结…

Effective Java 电子书 apk版本下载

下载安装包以后&#xff0c;安装即可阅读该书了&#xff0c;并且实时展示每章节代码哦&#xff0c;并且可以运行哦&#xff0c;赶快下载体验吧. Effective Java中文第二版下载地址&#xff1a;下载 应用截图&#xff1a; 转载于:https://www.cnblogs.com/spring87/p/6090010.ht…

SpringBoot解决ajax跨域问题

From: https://www.jianshu.com/p/e57ed1ee3070 利用注解的方式解决AJAX请求跨域问题一、第一种方式: 1、编写一个支持跨域请求的 Configuration import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.…

dataguru北京线下沙龙-第二部 《Oracle 索引优化思路--案例分享 -- 刘盛》

【视频&#xff1a;dataguru北京线下沙龙-第二部 《Oracle 索引优化思路--案例分享 -- 刘盛》 /微笑】