一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Redis - 使用SpringBoot集成redis的方法

使用SpringBoot集成redis的方法

2021-07-27 17:13JAVA_日月 Redis

這篇文章主要介紹了SpringBoot集成redis的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

今天,日月在這里教大家如何使用springBoot集成redis,說實話比較簡單,網上也有大把的教程。先套用一下網上的簡介。
定義

REmote DIctionary Server(Redis) 是一個由Salvatore Sanfilippo寫的key-value存儲系統。
Redis是一個開源的使用ANSI C語言編寫、遵守BSD協議、支持網絡、可基于內存亦可持久化的日志型、Key-Value數據庫,并提供多種語言的API。
它通常被稱為數據結構服務器,因為值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等類型。
reids的優點

以下是Redis的一些優點。

異常快 - Redis非常快,每秒可執行大約110000次的設置(SET)操作,每秒大約可執行81000次的讀取/獲取(GET)操作。
支持豐富的數據類型 - Redis支持開發人員常用的大多數數據類型,例如列表,集合,排序集和散列等等。這使得Redis很容易被用來解決各種問題,因為我們知道哪些問題可以更好使用地哪些數據類型來處理解決。
操作具有原子性 - 所有Redis操作都是原子操作,這確保如果兩個客戶端并發訪問,Redis服務器能接收更新的值。
多實用工具 - Redis是一個多實用工具,可用于多種用例,如:緩存,消息隊列(Redis本地支持發布/訂閱),應用程序中的任何短期數據,例如,web應用程序中的會話,網頁命中計數等。

Redis 安裝

 

Window 下安裝
下載地址:https://github.com/MSOpenTech/redis/releases。
Redis 支持 32 位和 64 位。這個需要根據你系統平臺的實際情況選擇,這里我們下載 Redis-x64-xxx.zip壓縮包到 C 盤,解壓后,將文件夾重新命名為 redis。

打開一個 cmd 窗口 使用cd命令切換目錄到 C:\redis
運行 redis-server.exe redis.windows.conf
如果想方便的話,可以把 redis 的路徑加到系統的環境變量里,這樣就省得再輸路徑了,后面的那個 redis.windows.conf 可以省略,如果省略,會啟用默認的。輸入之后,會顯示如下界面:

使用SpringBoot集成redis的方法

集成redis

 

我們還是延用上一章的項目:Springboot集成springcloud-config實現dataSource熱部署

1、添加依賴

  1. <!--集成redis-->
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-redis</artifactId>
  5. <version>1.4.1.RELEASE</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>com.alibaba</groupId>
  9. <artifactId>fastjson</artifactId>
  10. <version>1.2.3</version>
  11. </dependency>
  12. <dependency>
  13. <groupId>com.fasterxml.jackson.core</groupId>
  14. <artifactId>jackson-databind</artifactId>
  15. </dependency>

2、在配置中心里添加redis配置

  1. spring.redis.host=127.0.0.1
  2. #Redis服務器連接端口
  3. spring.redis.port=6379
  4. #Redis服務器連接密碼(默認為空)
  5. spring.redis.password=
  6. #連接池最大連接數(使用負值表示沒有限制)
  7. spring.redis.pool.max-active=8
  8. #連接池最大阻塞等待時間(使用負值表示沒有限制)
  9. spring.redis.pool.max-wait=-1
  10. #連接池中的最大空閑連接
  11. spring.redis.pool.max-idle=8
  12. #連接池中的最小空閑連接
  13. spring.redis.pool.min-idle=0
  14. #連接超時時間(毫秒)
  15. spring.redis.timeout=30000

3、配置類RedisConfig

  1. import java.lang.reflect.Method;
  2. import org.springframework.beans.factory.annotation.Value;
  3. import org.springframework.cache.CacheManager;
  4. import org.springframework.cache.annotation.CachingConfigurerSupport;
  5. import org.springframework.cache.annotation.EnableCaching;
  6. import org.springframework.cache.interceptor.KeyGenerator;
  7. import org.springframework.cloud.context.config.annotation.RefreshScope;
  8. import org.springframework.context.annotation.Bean;
  9. import org.springframework.context.annotation.Configuration;
  10. import org.springframework.data.redis.cache.RedisCacheManager;
  11. import org.springframework.data.redis.connection.RedisConnectionFactory;
  12. import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
  13. import org.springframework.data.redis.core.RedisTemplate;
  14. import org.springframework.data.redis.core.StringRedisTemplate;
  15. import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
  16. import com.fasterxml.jackson.annotation.PropertyAccessor;
  17. import com.fasterxml.jackson.annotation.JsonAutoDetect;
  18. import com.fasterxml.jackson.databind.ObjectMapper;
  19. @Configuration
  20. @EnableCaching
  21. @RefreshScope
  22. public class RedisConfig extends CachingConfigurerSupport{
  23. @Value("${spring.redis.host}")
  24. private String host;
  25. @Value("${spring.redis.port}")
  26. private int port;
  27. @Value("${spring.redis.timeout}")
  28. private int timeout;
  29. @Value("${spring.redis.password}")
  30. private String password;
  31. @Value("${spring.redis.pool.max-active}")
  32. private int maxActive;
  33. @Value("${spring.redis.pool.max-wait}")
  34. private int maxWait;
  35. @Value("${spring.redis.pool.max-idle}")
  36. private int maxIdle;
  37. @Value("${spring.redis.pool.min-idle}")
  38. private int minIdle;
  39.  
  40. @RefreshScope
  41. @Bean
  42. public KeyGenerator wiselyKeyGenerator(){
  43. return new KeyGenerator() {
  44. @Override
  45. public Object generate(Object target, Method method, Object... params) {
  46. StringBuilder sb = new StringBuilder();
  47. sb.append(target.getClass().getName());
  48. sb.append(method.getName());
  49. for (Object obj : params) {
  50. sb.append(obj.toString());
  51. }
  52. return sb.toString();
  53. }
  54. };
  55. }
  56.  
  57. @RefreshScope
  58. @Bean
  59. public JedisConnectionFactory redisConnectionFactory() {
  60. JedisConnectionFactory factory = new JedisConnectionFactory();
  61. factory.setHostName(host);
  62. factory.setPort(port);
  63. factory.setTimeout(timeout); //設置連接超時時間
  64. factory.setPassword(password);
  65. factory.getPoolConfig().setMaxIdle(maxIdle);
  66. factory.getPoolConfig().setMinIdle(minIdle);
  67. factory.getPoolConfig().setMaxTotal(maxActive);
  68. factory.getPoolConfig().setMaxWaitMillis(maxWait);
  69. return factory;
  70. }
  71.  
  72. @RefreshScope
  73. @Bean
  74. public CacheManager cacheManager(RedisTemplate redisTemplate) {
  75. RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
  76. // Number of seconds before expiration. Defaults to unlimited (0)
  77. cacheManager.setDefaultExpiration(10); //設置key-value超時時間
  78. return cacheManager;
  79. }
  80.  
  81. @RefreshScope
  82. @Bean
  83. public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
  84. StringRedisTemplate template = new StringRedisTemplate(factory);
  85. setSerializer(template); //設置序列化工具,這樣ReportBean不需要實現Serializable接口
  86. template.afterPropertiesSet();
  87. return template;
  88. }
  89.  
  90. @RefreshScope
  91. private void setSerializer(StringRedisTemplate template) {
  92. Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
  93. ObjectMapper om = new ObjectMapper();
  94. om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
  95. om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
  96. jackson2JsonRedisSerializer.setObjectMapper(om);
  97. template.setValueSerializer(jackson2JsonRedisSerializer);
  98. }
  99. }

4、RedisUtils類

  1. import java.io.Serializable;
  2. import java.util.List;
  3. import java.util.Set;
  4. import java.util.concurrent.TimeUnit;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.data.redis.core.HashOperations;
  7. import org.springframework.data.redis.core.ListOperations;
  8. import org.springframework.data.redis.core.RedisTemplate;
  9. import org.springframework.data.redis.core.SetOperations;
  10. import org.springframework.data.redis.core.ValueOperations;
  11. import org.springframework.data.redis.core.ZSetOperations;
  12. import org.springframework.stereotype.Service;
  13. @Service
  14. public class RedisUtils {
  15. @Autowired
  16. private RedisTemplate redisTemplate;
  17. /**
  18. * 寫入緩存
  19. * @param key
  20. * @param value
  21. * @return
  22. */
  23. public boolean set(final String key, Object value) {
  24. boolean result = false;
  25. try {
  26. ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();
  27. operations.set(key, value);
  28. result = true;
  29. } catch (Exception e) {
  30. e.printStackTrace();
  31. }
  32. return result;
  33. }
  34. /**
  35. * 寫入緩存設置時效時間
  36. * @param key
  37. * @param value
  38. * @return
  39. */
  40. public boolean set(final String key, Object value, Long expireTime ,TimeUnit timeUnit) {
  41. boolean result = false;
  42. try {
  43. ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();
  44. operations.set(key, value);
  45. redisTemplate.expire(key, expireTime, timeUnit);
  46. result = true;
  47. } catch (Exception e) {
  48. e.printStackTrace();
  49. }
  50. return result;
  51. }
  52. /**
  53. * 批量刪除對應的value
  54. * @param keys
  55. */
  56. public void remove(final String... keys) {
  57. for (String key : keys) {
  58. remove(key);
  59. }
  60. }
  61. /**
  62. * 批量刪除key
  63. * @param pattern
  64. */
  65. public void removePattern(final String pattern) {
  66. Set<Serializable> keys = redisTemplate.keys(pattern);
  67. if (keys.size() > 0){
  68. redisTemplate.delete(keys);
  69. }
  70. }
  71. /**
  72. * 刪除對應的value
  73. * @param key
  74. */
  75. public void remove(final String key) {
  76. if (exists(key)) {
  77. redisTemplate.delete(key);
  78. }
  79. }
  80. /**
  81. * 判斷緩存中是否有對應的value
  82. * @param key
  83. * @return
  84. */
  85. public boolean exists(final String key) {
  86. return redisTemplate.hasKey(key);
  87. }
  88. /**
  89. * 讀取緩存
  90. * @param key
  91. * @return
  92. */
  93. public Object get(final String key) {
  94. Object result = null;
  95. ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();
  96. result = operations.get(key);
  97. return result;
  98. }
  99. /**
  100. * 哈希 添加
  101. * @param key
  102. * @param hashKey
  103. * @param value
  104. */
  105. public void hmSet(String key, Object hashKey, Object value){
  106. HashOperations<String, Object, Object> hash = redisTemplate.opsForHash();
  107. hash.put(key,hashKey,value);
  108. }
  109. /**
  110. * 哈希獲取數據
  111. * @param key
  112. * @param hashKey
  113. * @return
  114. */
  115. public Object hmGet(String key, Object hashKey){
  116. HashOperations<String, Object, Object> hash = redisTemplate.opsForHash();
  117. return hash.get(key,hashKey);
  118. }
  119. /**
  120. * 列表添加
  121. * @param k
  122. * @param v
  123. */
  124. public void lPush(String k,Object v){
  125. ListOperations<String, Object> list = redisTemplate.opsForList();
  126. list.rightPush(k,v);
  127. }
  128. /**
  129. * 列表獲取
  130. * @param k
  131. * @param l
  132. * @param l1
  133. * @return
  134. */
  135. public List<Object> lRange(String k, long l, long l1){
  136. ListOperations<String, Object> list = redisTemplate.opsForList();
  137. return list.range(k,l,l1);
  138. }
  139. /**
  140. * 集合添加
  141. * @param key
  142. * @param value
  143. */
  144. public void add(String key,Object value){
  145. SetOperations<String, Object> set = redisTemplate.opsForSet();
  146. set.add(key,value);
  147. }
  148. /**
  149. * 集合獲取
  150. * @param key
  151. * @return
  152. */
  153. public Set<Object> setMembers(String key){
  154. SetOperations<String, Object> set = redisTemplate.opsForSet();
  155. return set.members(key);
  156. }
  157. /**
  158. * 有序集合添加
  159. * @param key
  160. * @param value
  161. * @param scoure
  162. */
  163. public void zAdd(String key,Object value,double scoure){
  164. ZSetOperations<String, Object> zset = redisTemplate.opsForZSet();
  165. zset.add(key,value,scoure);
  166. }
  167. /**
  168. * 有序集合獲取
  169. * @param key
  170. * @param scoure
  171. * @param scoure1
  172. * @return
  173. */
  174. public Set<Object> rangeByScore(String key,double scoure,double scoure1){
  175. ZSetOperations<String, Object> zset = redisTemplate.opsForZSet();
  176. return zset.rangeByScore(key, scoure, scoure1);
  177. }

5、測試,修改controller

  1. import java.util.concurrent.TimeUnit;
  2. import org.slf4j.Logger;
  3. import org.slf4j.LoggerFactory;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.web.bind.annotation.PathVariable;
  6. import org.springframework.web.bind.annotation.RequestMapping;
  7. import org.springframework.web.bind.annotation.RestController;
  8. import com.chenqi.springboot.redis.RedisUtils;
  9. import com.chenqi.springboot.service.TestService;
  10. @RestController
  11. public class SpringBootController {
  12.  
  13. public static final Logger log = LoggerFactory.getLogger(SpringBootController.class);
  14.  
  15. @Autowired
  16. TestService testService;
  17.  
  18. @Autowired
  19. private RedisUtils redisUtils;
  20. @RequestMapping(value = "/hello/{id}")
  21. public String hello(@PathVariable(value = "id") String id){
  22. //查詢緩存中是否存在
  23. boolean hasKey = redisUtils.exists(id);
  24. String str = "";
  25. if(hasKey){
  26. //獲取緩存
  27. Object object = redisUtils.get(id);
  28. log.info("從緩存獲取的數據"+ object);
  29. str = object.toString();
  30. }else{
  31. //從數據庫中獲取信息
  32. log.info("從數據庫中獲取數據");
  33. str = testService.test();
  34. //數據插入緩存(set中的參數含義:key值,user對象,緩存存在時間10(long類型),時間單位)
  35. redisUtils.set(id,str,10L,TimeUnit.MINUTES);
  36. log.info("數據插入緩存" + str);
  37. }
  38. return str;
  39. }
  40. }

啟動項目,第一次訪問:http://localhost:8002/hello/111

使用SpringBoot集成redis的方法
使用SpringBoot集成redis的方法

通過控制臺輸出,我們可以看到是從數據庫中獲取的數據,并且存入了redis緩存中。

我們再次刷新瀏覽器

使用SpringBoot集成redis的方法

可以看到,第二次是從緩存中讀取的,我們試試不斷刷新瀏覽器

使用SpringBoot集成redis的方法

可以看到,之后都是從緩存中獲取的。

到此我們的redis就配置好了。

SpringBoot集成Redis-demo下載

急需demo的兄弟就自行下載吧,不急可以留言郵箱,一般48小時內會發。

到此這篇關于使用SpringBoot集成redis的方法的文章就介紹到這了,更多相關SpringBoot集成redis內容請搜索我們以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持我們!

延伸 · 閱讀

精彩推薦
  • Redisredis 交集、并集、差集的具體使用

    redis 交集、并集、差集的具體使用

    這篇文章主要介紹了redis 交集、并集、差集的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友...

    xiaojin21cen10152021-07-27
  • RedisRedis 事務知識點相關總結

    Redis 事務知識點相關總結

    這篇文章主要介紹了Redis 事務相關總結,幫助大家更好的理解和學習使用Redis,感興趣的朋友可以了解下...

    AsiaYe8232021-07-28
  • RedisRedis的配置、啟動、操作和關閉方法

    Redis的配置、啟動、操作和關閉方法

    今天小編就為大家分享一篇Redis的配置、啟動、操作和關閉方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧 ...

    大道化簡5312019-11-14
  • RedisRedis全量復制與部分復制示例詳解

    Redis全量復制與部分復制示例詳解

    這篇文章主要給大家介紹了關于Redis全量復制與部分復制的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Redis爬蟲具有一定的參考學習...

    豆子先生5052019-11-27
  • Redisredis中如何使用lua腳本讓你的靈活性提高5個逼格詳解

    redis中如何使用lua腳本讓你的靈活性提高5個逼格詳解

    這篇文章主要給大家介紹了關于redis中如何使用lua腳本讓你的靈活性提高5個逼格的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具...

    一線碼農5812019-11-18
  • Redisredis實現排行榜功能

    redis實現排行榜功能

    排行榜在很多地方都能使用到,redis的zset可以很方便地用來實現排行榜功能,本文就來簡單的介紹一下如何使用,具有一定的參考價值,感興趣的小伙伴們...

    乘月歸5022021-08-05
  • RedisRedis如何實現數據庫讀寫分離詳解

    Redis如何實現數據庫讀寫分離詳解

    Redis的主從架構,能幫助我們實現讀多,寫少的情況,下面這篇文章主要給大家介紹了關于Redis如何實現數據庫讀寫分離的相關資料,文中通過示例代碼介紹...

    羅兵漂流記6092019-11-11
  • Redis詳解Redis復制原理

    詳解Redis復制原理

    與大多數db一樣,Redis也提供了復制機制,以滿足故障恢復和負載均衡等需求。復制也是Redis高可用的基礎,哨兵和集群都是建立在復制基礎上實現高可用的...

    李留廣10222021-08-09
主站蜘蛛池模板: 免费在线观看伦理片 | 456亚洲人成高清在线 | 视频高清在线观看 | avtt在线观看| 69av美女| 勾搭已婚高h | 毛片免费观看的视频 | 国产51页| 好大好爽好舒服视频 | 99国产精品久久久久久久... | 精品久久免费视频 | 97热久久免费频精品99国产成人 | 久久免费看少妇高潮A片特爽 | 四虎影视永久在线观看 | 91社区在线观看精品 | 五月香婷婷 | 高清免费毛片 | 日韩精品一区二区三区免费视频 | 天美麻豆| 欧美成人免费观看国产 | 午夜宅男宅女看在线观看 | 26uuu老色哥 236宅宅2021最新理论 | 2021国产麻豆剧传媒剧情动漫 | 成年人免费观看的视频 | 第一次破苞h | tube性睡觉hd | 国产高清一区二区三区免费视频 | 99久久香蕉国产线看观香 | 日韩一区二区三区免费 | 波多野结衣在线看 | 成人午夜视频一区二区国语 | 每天都要睡男人(nph) | 天堂网在线网站成人午夜网站 | 全日本爽视频在线 | 日本老妇乱子伦中文视频 | 曹逼网站| 精品夜夜澡人妻无码AV蜜桃 | 艹艹逼| 国产精品久久久久久久福利院 | a国产在线| 91九色在线视频 |