日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringBoot系列十:SpringBoot整合Redis

發布時間:2023/12/9 javascript 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 數據庫的使用是一種常 見形式。

總結

以上是生活随笔為你收集整理的SpringBoot系列十:SpringBoot整合Redis的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产福利电影在线 | 你懂的网址在线观看 | 神马福利视频 | 国模私拍一区二区三区 | 久久国产乱子伦精品 | 午夜久久久久久久久久 | 久久久久国产精品国产 | 怡红院成人网 | 国模大尺度视频 | 国产精品无码免费专区午夜 | 久久婷婷久久 | 精品一区在线观看视频 | 精品少妇人妻av免费久久久 | 骚色综合 | 欧美日韩国产不卡 | 久草福利资源 | 日韩欧美卡一卡二 | 91禁在线观看 | 国产一级特黄毛片 | 中文字幕在线观看欧美 | 中文字幕乱码一区二区 | 秋霞99 | 狠狠撸视频 | 污视频免费网站 | 自拍偷拍导航 | 婷婷的五月 | 在线aaa | 天天摸天天舔 | 骚鸭av | 97超碰国产精品无码蜜芽 | 亚洲天堂色 | 欧美片网站免费 | 久久亚洲av无码精品色午夜麻豆 | 午夜av片| 伊人avav | 成人黄色免费视频 | 极品少妇av| 在线播放亚洲精品 | 大尺度做爰呻吟舌吻情头 | 亚洲开心网 | 性爱视频在线免费 | 中文字幕亚洲一区二区三区 | av看片网站 | 成人综合激情 | 精品国产乱码久久久久久免费 | 成人在线综合 | 久久亚洲aⅴ无码精品 | 性网站在线观看 | 精品视频在线免费观看 | 成人在线免费视频 | 天天爱天天插 | 日韩福利视频在线观看 | 青青草网站 | 国产做a视频 | 国产精品自拍视频一区 | 污污视频在线观看免费 | 香蕉久久久 | 免费在线观看黄色片 | 91免费成人 | www.com黄色| 后入内射欧美99二区视频 | 国产午夜亚洲精品午夜鲁丝片 | 国产青青草视频 | ktv做爰视频一区二区 | 91吃瓜今日吃瓜入口 | 看了让人下面流水的视频 | 久久久男女| 在线日韩成人 | 欧美不卡一区二区 | youjizz视频| 欧美日韩成人一区 | 寂寞午夜影院 | 九一av | 人人妻人人澡人人爽人人精品 | 寡妇激情做爰呻吟 | 色噜噜av| 国产又色又爽无遮挡免费动态图 | 午夜嘿嘿 | 欧美日韩观看 | 一本色道久久88亚洲精品综合 | www成年人| 国产高清不卡一区 | 欧美亚一区二区三区 | 国产美女无遮挡免费 | 国产专区第一页 | 欧美大色一区 | 亚洲国产精品久久久久 | 欧美成人性生活片 | 久久精品一区二区三区黑人印度 | 国产精品视频一二区 | 欧美日韩人妻精品一区二区三区 | 国产精品久久久无码一区 | 熟女人妻一区二区三区免费看 | 黄色3级视频 | 深夜视频免费在线观看 | 欧美一卡二卡三卡四卡 | 欧美黑粗硬 | 三级网站在线 | 阿娇全套94张未删图久久 |