国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

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

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非??欤棵肟蓤绦写蠹s110000次的設置(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
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 亚洲一区在线视频 | 欧美日韩一级电影 | 黑人粗大视频 | 黄视频免费观看网站 | 国产99久久精品 | 日本不卡一区二区三区在线观看 | 国产精品久久久久久久久久久久久 | 日韩精品在线播放 | 成人日韩 | 激情亚洲 | 中文字幕一区二区三区精彩视频 | 亚洲综合激情 | 香蕉成人 | 天天操天天碰 | 日韩精品一区二区三区视频播放 | 欧美成人免费在线视频 | 亚洲高清色综合 | 日韩欧美一区二区三区 | 中文久久久久久 | 国产在线精品一区 | 国产黄色a级毛片 | 亚洲综合首页 | 精久久 | 日韩久色 | 精品久久久久久久久久久久久久 | 91精品国产综合久久小仙女陆萱萱 | 国产欧美综合一区二区三区 | 99国产视频 | 亚洲欧美福利视频 | 国产免费久久 | 老色批影院| 日韩在线小视频 | 日韩精品在线免费观看 | 久久精品亚洲一区 | 黑森林av凹凸导航 | 韩日免费视频 | 午夜视频免费 | 日韩成人中文字幕 | 久久成人高清 | 国内成人自拍视频 | 久久99精品久久久久久国产越南 |