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