摘要:豐富的特性還支持通知過期等等特性。到這個就說明測試通過了。主要針對方法配置,能夠根據方法的請求參數對其進行緩存,常用于查詢操作主要針對方法配置,能夠根據方法的請求參數對其進行緩存,常用于修改操作清空緩存,主要用于刪除操作。
[TOC]
Redis簡介Redis 是一個開源的使用 ANSI C 語言編寫、遵守 BSD 協議、支持網絡、可基于內存亦可持久化的日志型、Key-Value 數據庫,并提供多種語言的 API的非關系型數據庫(NoSQL)。
Redis的特性Redis的所有操作都是原子性的,意思就是要么成功執行要么失敗完全不執行。單個操作是原子性的。多個操作也支持事務,即原子性,通過MULTI和EXEC指令包起來。
性能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s 。豐富的數據類型 – Redis支持二進制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數據類型操作。
原子 – Redis的所有操作都是原子性的,意思就是要么成功執行要么失敗完全不執行。單個操作是原子性的。多個操作也支持事務,即原子性,通過MULTI和EXEC指令包起來。
豐富的特性 – Redis還支持 publish/subscribe, 通知, key 過期等等特性。
Redis的應用會話緩存
數據緩存
排行榜/計數器
消息隊列
Redis的數據類型String: 字符串
Hash: 散列
List: 列表
Set: 集合
Sorted Set: 有序集合
Redis的部署PS: 我這里是基于Mac環境,Windows環境下的同學可以安裝Linux虛擬機同步進行操作。
官網下載 Stable(穩定)版本
找到下載的文件,解壓并編譯
tar -zxvf redis-5.0.4.tar.gz mv redis-5.0.4 /usr/local/ cd /usr/local/redis-5.0.4/ make test
執行到這里,最好先執行一遍make test,確保編譯可以通過,需要大概三分鐘。
到這個就說明測試通過了。我們接著往下執行
make cd src/ make install
執行到這里安裝就算是告一段落了,接下來我們進行redis的一些配置:
vim ../redis.conf
找到136行左右的daemonize將其屬性改為yes,可以讓redis在后臺運行,然后找到500行左右的requirepass,后面輸入我們需要設置的密碼,這樣就可以通過密碼來訪問redis了。
然后我們通過指定配置文件的方式來啟動redis
./redis-server ../redis.conf
執行完事兒之后,查看是否執行成功:
ps -ef | grep redis
可以看到,我們的redis已經啟動成功了,然后通過rdm來訪問一下:
大功告成,現在萬事俱備,只欠東風。我們下面來看一下在Spring Boot中怎么使用redis吧。
在Spring Boot中的使用Spring Boot給我們提供了現成的spring-boot-starter-data-redis,我們只需要在pom文件中將之導入即可。
org.springframework.boot spring-boot-starter-data-redis org.apache.commons commons-pool2
然后,我們需要在配置文件中配置一些有關redis的信息:
spring: redis: host: 127.0.0.1 # IP port: 6379 # 端口號 password: 123456 # 密碼 lettuce: pool: max-active: 8 # 連接池最大連接數 max-wait: -1ms # 連接池最大阻塞等待時間(使用負值表示沒有限制) min-idle: 0 # 連接池中的最小空閑連接 max-idle: 8 # 連接池中的最大空閑連接
接下來,我們需要對我們所需要的Redis的操作給封裝到一個接口中,方便我們去調用,這里我基于接口,抽象類,實現類的結構實現了一套Redis的方法,需要的同學可以去GitHub上下載(子項目名稱:viboot-rds),GitHub的地址在文末。這里僅僅貼出接口的部分方法。
package com.itframe.dao; import java.util.List; import java.util.Map; import java.util.Set; /** * */ public interface RedisDao { /** * 判斷緩存中是否有對應的value * * @param key * @return boolean */ public boolean existsKey(Object key); /** * 根據key獲取key列表(key值可為模糊匹配---taskInfo:taskDetail:* <---> *代表任意字符) * * @param pattern * @return Set
在抽象類中我們進行了RedisTemplate的初始化以及序列化:
public abstract class AbstractBaseRedisDao{ @Resource(name = "redisTemplate") protected RedisTemplate redisTemplate; /** * 設置redisTemplate * * @param redisTemplate */ public void setRedisTemplate(RedisTemplate redisTemplate) { this.redisTemplate = redisTemplate; } /** * 獲取 RedisSerializer */ protected RedisSerializer getRedisSerializer() { return redisTemplate.getStringSerializer(); } }
在實現類中我們通過操作RestTemplate來實現接口中的方法~
Redis緩存實戰首先,我們如果想在Spring Boot項目中啟用緩存,需要在啟動類上加上注解@EnableCaching,這個是重點,要記住了!
首先介紹一下注解三劍客:@Cacheable, @CachePut,@CacheEvict。
@Cacheable:主要針對方法配置,能夠根據方法的請求參數對其進行緩存,常用于查詢操作
@CachePut:主要針對方法配置,能夠根據方法的請求參數對其進行緩存,常用于修改操作
@CacheEvict:清空緩存,主要用于刪除操作。
下面我們來看一下用法:
/** * value: 緩存的名稱 * key: 緩存的鍵 * return 緩存的值 */ @Override @Cacheable(value = "users", key = "#id") public UserDO findOne(Long id) { // 如果我們第二次訪問的時候,控制臺沒有打印出這句話說明是從緩存中取出 log.info("From MYSQL"); return userMapper.get(id); } @Override @CachePut(value = "users", key = "#userDO.id") public UserDO update(UserDO userDO) { // 執行之后,再次訪問findOne的時候,應當沒有打印出“From MySQL”,且返回的是我們修改后的值,說明這一步緩存成功 if (userMapper.update(userDO) > 0) { return userMapper.get(userDO.getId()); } return null; } @Override @CacheEvict(value = "users", key = "#id") public int delete(Long id) { // 執行之后去rdm中查看即可 return userMapper.delete(id); }測試1
第一次訪問findOne
第二次訪問findOne:
仍然是剛剛的結果,但是控制臺沒有打印出任何東西,說明緩存成功
測試2調用update后再次調用findOne:
可以看出信息已被修改且未訪問數據庫
測試3訪問delete,查看rdm:
說明刪除成功~
源碼地址Github
Gitee
記得順手點個star,您的肯定是對我寫作最大的動力!
公眾號原創文章,文筆有限,才疏學淺,文中若有不正之處,萬望告知
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/75966.html
摘要:作為面試官,我是如何甄別應聘者的包裝程度語言和等其他語言的對比分析和主從復制的原理詳解和持久化的原理是什么面試中經常被問到的持久化與恢復實現故障恢復自動化詳解哨兵技術查漏補缺最易錯過的技術要點大掃盲意外宕機不難解決,但你真的懂數據恢復嗎每秒 作為面試官,我是如何甄別應聘者的包裝程度Go語言和Java、python等其他語言的對比分析 Redis和MySQL Redis:主從復制的原理詳...
摘要:作為面試官,我是如何甄別應聘者的包裝程度語言和等其他語言的對比分析和主從復制的原理詳解和持久化的原理是什么面試中經常被問到的持久化與恢復實現故障恢復自動化詳解哨兵技術查漏補缺最易錯過的技術要點大掃盲意外宕機不難解決,但你真的懂數據恢復嗎每秒 作為面試官,我是如何甄別應聘者的包裝程度Go語言和Java、python等其他語言的對比分析 Redis和MySQL Redis:主從復制的原理詳...
摘要:在項目中,為滿足以上要求,我們將大量的參數配置在或文件中,通過注解,我們可以方便的獲取這些參數值使用配置模塊假設我們正在搭建一個發送郵件的模塊。這使得在不影響其他模塊的情況下重構一個模塊中的屬性變得容易。 在編寫項目代碼時,我們要求更靈活的配置,更好的模塊化整合。在 Spring Boot 項目中,為滿足以上要求,我們將大量的參數配置在 application.properties 或...
摘要:在項目中,為滿足以上要求,我們將大量的參數配置在或文件中,通過注解,我們可以方便的獲取這些參數值使用配置模塊假設我們正在搭建一個發送郵件的模塊。這使得在不影響其他模塊的情況下重構一個模塊中的屬性變得容易。 在編寫項目代碼時,我們要求更靈活的配置,更好的模塊化整合。在 Spring Boot 項目中,為滿足以上要求,我們將大量的參數配置在 application.properties 或...
閱讀 2922·2021-11-24 09:39
閱讀 3599·2021-11-22 13:54
閱讀 3409·2021-11-16 11:45
閱讀 2432·2021-09-09 09:33
閱讀 3194·2019-08-30 15:55
閱讀 1290·2019-08-29 15:40
閱讀 920·2019-08-29 15:19
閱讀 3396·2019-08-29 15:14