SpringBoot實現Redis(非註解版實現,註解在有些地方使用不了)
Springboot整合redis非常簡單,如下,作者指出一種簡單的實現方式
import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.cache.CacheManager; import org.springframework.cache.annotation.EnableCaching; import org.springframework.cache.interceptor.KeyGenerator; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.cache.RedisCacheManager; import org.springframework.data.redis.connection.RedisConnectionFactory;import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import java.lang.reflect.Method; @Configuration @EnableCaching public class DspRedisConfig { @Beanpublic KeyGenerator keyGenerator() { return new KeyGenerator() { @Override public Object generate(Object target, Method method, Object... params) { StringBuilder sb = new StringBuilder(); sb.append(target.getClass().getName()); sb.append(method.getName()); for (Object obj : params) { sb.append(obj.toString()); } return sb.toString(); } }; } @SuppressWarnings("rawtypes") @Bean public CacheManager cacheManager(RedisTemplate redisTemplate) { RedisCacheManager rcm = new RedisCacheManager(redisTemplate); //設定快取過期時間,對通過redisTemplate操作的redis無效 //rcm.setDefaultExpiration(300); return rcm; } @Bean public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) { StringRedisTemplate template = new StringRedisTemplate(factory); Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(om); template.setValueSerializer(jackson2JsonRedisSerializer); template.afterPropertiesSet(); return template; } }
springboot核心的application檔案新增如下配置
spring.redis.host = localhost spring.redis.port = 6379 spring.redis.pool.max-active = 20 spring.redis.pool.max-idle = 5 spring.redis.pool.min-idle = 0 spring.redis.pool.max-wait = 10000這樣,當Springboot自動載入時候,就會把控制操作redis的redisTemplete注入
這樣就可以通過註解方式操作我們要快取的資料了
但是當我們想要獨自去操作redisTemplete時,直接使用redisTemplete快取資料時無效
作者修改程式碼如下,即可隨意操作redis,過期時間在這裡設定是管用的~~~~~~~~~
我設定的24小時過期的token~~~~~~~~~~~~~~~~~
package com.nox.dsp.utils; import com.nox.dsp.config.DspErrorConstant; import com.nox.dsp.config.DspServerConstant; import com.nox.dsp.entity.DspException; import com.nox.dsp.entity.DspResponseEntity; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import java.util.UUID; import java.util.concurrent.TimeUnit; @Service("tokenManager") public class TokenManager { private static Logger logger = LogManager .getLogger(TokenManager.class.getName()); @Autowired public RedisTemplate redisTemplate; public boolean genUserToken(DspResponseEntity repEntity) throws DspException { boolean isOk = false; try { if (!DspServerConstant.TOKEN_IS_CHECK) { return true; } String userToken = UUID.randomUUID().toString().replace("-", ""); String fullToken = DspServerConstant.TOKEN_PREFIX + "_" + repEntity.getCasEntity().getUid() + "_" + userToken; repEntity.getCasEntity().setUserToken(userToken); redisTemplate.opsForValue().set(fullToken ,DspServerConstant.TOKEN_VALUE); redisTemplate.expire(fullToken , 24*60*60 , TimeUnit.SECONDS); isOk = true; } catch (Exception e) { isOk = false; e.printStackTrace(); throw new DspException(DspErrorConstant.ERROR_100005, DspErrorConstant.ERROR_100005_MSG); } return isOk; } public Boolean checkUserToken(String uid, String userToken) { if (!DspServerConstant.TOKEN_IS_CHECK) { return true; } else if (uid == null || userToken == null) { return false; } else { String fullToken = DspServerConstant.TOKEN_PREFIX + "_" + uid + "_" + userToken; System.out.println(fullToken); Object value = redisTemplate.opsForValue().get(fullToken); if(value != null && value.equals("1")){ redisTemplate.delete(fullToken); return true; } return false; } } }
相關推薦
SpringBoot實現Redis(非註解版實現,註解在有些地方使用不了)
Springboot整合redis非常簡單,如下,作者指出一種簡單的實現方式 import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.P
Navicat for SQL使用注意(設定預設字符集,外來鍵儲存不了)
最近用mysql+Navicat for sql開發專案時遇到了以下問題: 1.預設建立的資料庫,字符集編碼為:latin1 -- cp1252 West European 在資料庫中儲存中文時會出現亂碼錯誤 2.用Navicat給資料庫新增外來鍵約束時,儲存
19-SpringBoot之Redis(六)——Redis快取實現
SpringBoot之Redis(六)——Redis快取實現 1. 新增maven依賴 2. 引數配置 3. 實體類 4. Dao 5. Service 6. Controller 7. 原始碼下載 1. 新增m
Springboot整合mybatis註解版實現
一、前言 Springboot的使用極大程度上減少了相關檔案的配置,將繁瑣的類似於spring+mybatis+spring mvc的配置簡化到只需要一些簡單的資料庫資源連結資源配置,剩下的相關配置都交給了maven和spring initializr完成。本文在給予Spr
Spring boot實戰專案整合阿里雲RocketMQ (非開源版)訊息佇列實現傳送普通訊息,延時訊息 --附程式碼
一.為什麼選擇RocketMQ訊息佇列? 首先RocketMQ是阿里巴巴自研出來的,也已開源。其效能和穩定性從雙11就能看出來,借用阿里的一句官方介紹:歷年雙 11 購物狂歡節零點千萬級 TPS、萬億級資料洪峰,創造了全球最大的業務訊息併發以及流轉紀錄(日誌類訊息除外); 在始終保證高效能前提下
初夏小談:斐波那契三種實現方法(C語言版)(第三種相信你沒見過)
斐波那契數列(Fibonaccisequnce),又稱黃金分割數列。研究斐波那契數列有相當重要的價值,例在現代物理、準晶體結構、化學等領域都有直接的應用。因此研究斐波那契數列也是很有必要的。 今天初夏將為大家帶來計算斐波那契數列第n位的三種方法 第一種利用遞迴的方法計算,程式碼相當簡單,但其
rsync的自動指令碼實現方案(非rsyncd服務)
1、前言 rsyncd的方式筆者認為方便,但會在系統留下一個被攻擊的服務點,筆者認為用自動函式+普通使用者的方式較安全,故而寫下此文備用。 2、實現 2.1、環境 rsyncSer: ipaddress=10.168.0.100 client: ipaddres
springboot 整合 redis 主從同步 sentinel哨兵 實現商品搶購秒殺
這段時間利用週末學習了一下redis的主從同步,同時配合sentinel哨兵機制,sentinel是redis實現HA的一種方式。為了能學以致用,這裡使用springboot 把redis 主從同步及sentinel整合起來實現一個商品搶購的demo,同時在開發過程中遇到的
springBoot整合Redis(單機版和叢集版)
Spring Boot中除了對常用的關係型資料庫提供了優秀的自動化支援之外,對於很多NoSQL資料庫一樣提供了自動化配置的支援,包括:Redis, MongoDB, Elasticsearch, Solr和Cassandra。 Redis是一個開
作業系統程序排程實現演算法(c語言版)
#include <stdio.h>#include <stdlib.h>#include <windows.h> //包含sleep函式#define TRUE 1#define FALSE 0#define OK 1#define
串列埠傳檔案(非終端串列埠,自己定協議下位機部分C語言實現)
之前專案中有個地方要實現一個功能,就是通過非終端串列埠傳輸檔案,這裡將其作為一個小功能模組,簡單的介紹一下自己是如何實現的!SecureCRT超級終端上可以通過lrz等工具通過命令傳輸檔案這個就不介紹,之前的部落格也有寫過怎麼編譯移植使用這個工具,這次是自己來編碼實現通過非
iOS實現表格(非TableView)
WhdeForm pod 'WhdeForm', '~> 1.0.0' 添加了Reusable機制 添加了橫(Section)表頭 添加了豎(Column)表頭 添加了左上角(TopLeftHeader)總表頭 通過FDateSource去建
二叉樹遍歷演算法(遞迴實現先序中序和後續遍歷)(非遞迴實現中序和先續)
二叉樹遍歷 這兩天抓緊把二叉樹遍歷複習了一遍,遞迴實現還是一如既往地簡潔,迭代版本寫了好久還是隻實現了先序和中序,後續一直沒搞明白,有空了再更新。 遞迴實現 void RecursionBackTree(TreeNode * root) {
C++實現cat021(0.26版)報文解析
最近接觸了一個小專案,使用C++對cat021(0.26)報文進行解析。剛開始沒有頭緒,之後在參考了CSDN博主TimiWang的文章:https://blog.csdn.net/wangtingming/article/details/52400656(十分感謝)和閱讀了英文文件之後,磕磕絆絆
第4章第1節練習題2 二叉樹的基本操作(非遞迴實現)
二叉樹的非遞迴遍歷 上一節二叉樹的遞迴遍歷中簡單介紹了二叉樹的遞迴遍歷的實現方式,本節主要介紹二叉樹的非遞迴遍歷實現,繼續引用上節的例子來說明下。 一.先序遍歷 二叉樹先序遍歷的訪問順序為:根結點->左孩子->右孩子。簡單的說,對於任意
利用鄰接矩陣儲存無向圖,並實現BFS(非遞迴) DFS(遞迴+非遞迴)兩種遍歷
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<iostream> using namespace std; //------------鄰接矩陣----------- #def
模擬實現 Promise(小白版)
模擬實現 Promise(小白版) 本篇來講講如何模擬實現一個 Promise 的基本功能,網上這類文章已經很多,本篇筆墨會比較多,因為想用自己的理解,用白話文來講講 Promise 的基本規範,參考了這篇:【翻譯】Promises/A+規範 但說實話,太多的專業術語,以及基本按照標準規範格式翻譯而來,有些內
win7配置安裝tensorflow(非GPU版)
win7配置安裝tensorflow(非GPU版) 引言 1、配置安裝Anaconda3-4.2.0 2、通過Anaconda配置相應版本Python 3、配置安裝TensorFlow 4、下載python IDE pychar
JAVA 利用Arraylist.sort()進行排序的實現。(comparable介面的實現)
1.什麼是Comparable介面 此介面強行對實現它的每個類的物件進行整體排序。此排序被稱為該類的自然排序 ,類的 compareTo 方法被稱為它的自然比較方法 。實現此介面的物件列表(和陣列)可以通過 Collections.sort (和 Arrays.sort )進行自動排序。實現此介面的
matlab實現jpeg (ycbc4:2:0取樣壓縮 + 量化表ycbc量化壓縮)和(ycbc4:4:4取樣 + 量化表ycbc量化壓縮)
如果對ycbcr取樣不太瞭解的同學,warp gate:https://blog.csdn.net/xueyushenzhou/article/details/40817949 簡單的說,4:2:0就是第一行為y:cb=4:2,沒有cr分量,那麼第二行就是y:cr=4:2,沒有cb分量。以後每一