最近換了工作,新的公司中用到SpringBoot和Redis,之前也有零散的看過SpringBoot和Redis相關的知識,現在有時間打算自己整合一下這兩個,後面有時間還會繼續整合ActiveMQ。
既然打算整合SpringBoot和Redis,首先對SpringBoot和Redis做一個簡單介紹。
SpringBoot:不是什麼新技術,爲了簡化Spring配置,而提供的新的框架,爲了快速搭建Spring的開發環境,可以純Java開發沒有XML,並且內置了Tomcat無需部署。
Redis:一個非關係型數據庫,提供快速讀寫,主要用於緩存,降低數據庫的讀寫壓力,快速響應。
1.reids的安裝
$ wget http://download.redis.io/releases/redis-5.0.0.tar.gz
$ tar xzf redis-5.0.0.tar.gz
$ cd redis-5.0.0
$ make
進入到解壓後的 src 目錄,通過如下命令啓動Redis:
cd src
啓動服務端
nohup ./redis-server & //後臺方式啓動日誌寫在nohup
啓動客戶段
./redis-cli
客戶端連接測試輸入ping,顯示pong 則連接正常如下圖
ping
幾個常用redis命令:
keys * //查詢當前庫的所有的key值
del key //刪除key-value
set key value //設置key-value
get key //獲取key對應的value
flushdb //刪除當前庫的值
2. 代碼
githug地址:https://github.com/441630179/SpringBootRedis.git
3. 代碼運行
a)運行SpringApplication
b)瀏覽器中輸入http://localhost:8081/SpringBoot/setValue?key=sex&value=boy
![在這裏插入圖片描述](https://img-blog.csdnimg.cn/2018110612422479.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xhb3RhbnN1b2NhaQ==,size_16,color_FFFFFF,t_70)
c)查看redis中的結果
![在這裏插入圖片描述](https://img-blog.csdnimg.cn/20181106124425191.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xhb3RhbnN1b2NhaQ==,size_16,color_FFFFFF,t_70)
4. 代碼編寫中遇到的坑
1)編寫RedisConfig 類是註解寫錯@Configuration 沒有注意寫成了@Configurable導致加載不到類,啓動tomcat報錯
2)redis存入的值是key和value"\xac\xed\x00\x05t\x00\x03mmm" 顯示問題,但是讀取沒有問題,最後網上查詢是由於SpringBoot默認使用JDK的序列化,所以會這樣,使用以下方法可正常顯示。
/**
* 設置數據存入 redis 的序列化方式
* 默認使用JDK的序列化,顯示16進制
*
* @param redisTemplate
* @param factory
*/
private void initDomainRedisTemplate(RedisTemplate<String, Object> redisTemplate, RedisConnectionFactory factory) {
RedisSerializer stringSerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(stringSerializer);
redisTemplate.setHashKeySerializer(stringSerializer);
redisTemplate.setHashValueSerializer(stringSerializer);
redisTemplate.setValueSerializer(stringSerializer);
redisTemplate.setConnectionFactory(factory);
}
@Bean
public RedisTemplate<String, Object> functionDomainRedisTemplate() {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
initDomainRedisTemplate(redisTemplate, redisConnectionFactory);
return redisTemplate;
}