Spring-data-redis為spring-data模組中對redis的支援部分,簡稱為“SDR”,提供了基於jedis客戶端API的高度封裝以及與spring容器的整合,事實上jedis客戶端已經足夠簡單和輕量級,而spring-data-redis反而有「過度設計」的嫌疑。
jedis用戶端在程式實作方面存在以下不足:
1) connection管理缺乏自動化,connection-pool的設計缺乏必要的容器支援。
2) 資料操作需要關注“序列化”/“反序列化”,因為jedis的客戶端API接受的資料類型為string和byte,對結構化資料(json,xml,pojo)操作需要額外的支持。
3) 事務操作純粹為硬編碼
4) pub/sub功能,缺乏必要的設計模式支持,對於開發者而言需要關注的太多。
1. Redis使用場景
Redis是一個開源的使用ANSI C語言編寫、支援網路、可基於記憶體亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API。
我們都知道,在日常的應用中,資料庫瓶頸是最容易出現的。資料量太大且頻繁的查詢,由於磁碟IO效能的局限性,導致專案的效能越來越低。
這時候,基於記憶體的快取框架,就能解決我們很多問題。例如Memcache,Redis等。將一些頻繁使用的資料放入快取讀取,大大降低了資料庫的負擔。提升了系統的性能。其實,對於hibernate以及Mybatis的二級緩存,是同樣的道理。利用記憶體高速的讀寫速度,來解決硬碟的瓶頸。
2. 配置使用redis
在applicationContext-dao.xml中配置如下:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
-
#########################################################################。
xmlns:mongo="http://www.springframework.org/schema/data/mongo" #####################################################################################################################
xmlns:aop="http://www.springframework.org/schema/aop" ##############################################################################
xsi:schemaLocation="http://www.springframework.org/schema/beans ############################################################################################################################################################################################################################################################'
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd #################################################################################1
http://www.springframework.org/schema/data/mongo ###############################################################
http://www.springframework.org/schema/data/mongo/spring-mongo.xsd #############
http://www.springframework.org/schema/context #############################################################
http://www.springframework.org/schema/context/spring-context-3.0.xsd ##############
http://www.springframework.org/schema/aop #############
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> #####################
#############
############# ############# ############## ######################1 #############1 ### #
豆>
; ; 豆>
; > > > 豆>
豆>
database.properties檔案如下:
# redis.maxIdle=10
# redis.maxActive=20
# redis.maxWait=10000
redis.testOnBorrow=true
# redis.host=192.168.1.76
# redis.port=6379
# redis.pass=password1
##spring-data-redis提供了多種序列化器策略,這對於使用jedis的開發者而言,實際上非常便捷。sdr提供了 4種內建的序列化器:
- # JdkSerializationRedisSerializer:利用JDK的序列化手段(serializing接口,ObjectInputStrean,ObjectOutputStream),資料以字節流存儲,POJO物件的存取場景,利用JDK本身序列化機制,將pojo類別透過ObjectInputStream/ObjectOutputStream進行序列化操作,最終redis-server中將儲存位元組序列,是目前最常用的序列化策略。
- # StringRedisSerializer:字串編碼,資料以字串存儲,Key或value為字串的場景,根據指定的字元集對資料的位元組序列編碼成字串,是“new String(bytes, charset)”和“string .getBytes( charset)”的直接封裝。是最輕量級和高效的策略。
# JacksonJsonRedisSerializer:json格式存儲,jackson-json工具提供了javabean與json之間的轉換能力,可以將pojo實例序列化成json格式儲存在redis中,也可以將json格式的資料轉換成pojo實例。因為jackson工具在序列化和反序列化時,需要明確指定Class類型,因此此策略封裝起來稍微複雜。 【需要jackson-mapper-asl工具支援】
OxmSerializer:xml格式存儲,提供了將javabean與xml之間的轉換能力,目前可用的三方支援包括jaxb,apache-xmlbeans;redis儲存的資料將是xml工具。不過使用此策略,程式設計將會有些難度,而且效率最低;不建議使用。 【需要spring-oxm模組的支援】
# 其中JdkSerializationRedisSerializer和StringRedisSerializer是最基礎的序列化策略,其中「JacksonJsonRedisSerializer」與「OxmSerializer」都是基於stirng存儲,因此它們是較為「高級」的序列化(最終還是使用string解析以及構建java)。針對「序列化和發序列化」中JdkSerializationRedisSerializer和StringRedisSerializer是最基礎的策略,原則上,我們可以將資料儲存為任何格式以便應用程式存取和解析(其中應用程式包括app,hadoop等其他工具),不過在設計時仍然不建議直接使用“JacksonJsonRedisSerializer”和“OxmSerializer”,因為無論是json還是xml,他們本身仍然是String。如果你的資料需要被第三方工具解析,那麼資料應該使用StringRedisSerializer而不是JdkSerializationRedisSerializer。
RedisTemplate中需要宣告4種serializer,預設為「JdkSerializationRedisSerializer」:
1) keySerializer :對於普通K-V操作時,key採取的序列化策略
2) valueSerializer:value採取的序列化策略
3) hashKeySerializer: 在hash資料結構中,hash-key的序列化策略
# 4) hashValueSerializer:hash-value的序列化策略
# 無論如何,建議key/hashKey採用StringRedisSerializer。
spring-data-redis針對jedis提供以下功能:
#1. 連結池自動管理,提供了一個高度封裝的「RedisTemplate」類別
# 2. 針對jedis客戶端中大量api進行了歸類封裝,將相同類型作業封裝為operation介面
# ValueOperations:簡單K-V操作
# SetOperations:set類型資料操作
# ZSetOperations:zset類型資料操作
# HashOperations:針對map類型的資料操作
# ListOperations:針對list類型的資料操作
# 3. 提供了對key的「bound」(綁定)便捷化操作API,可以透過bound封裝指定的key,然後進行一系列的操作而無須「顯式」的再次指定Key,即BoundKeyOperations:
# BoundValueOperations
BoundSetOperations
BoundListOperations
BoundSetOperations
BoundHashOperations
3. RedisTemplate的使用
這個類別作為一個模版類,提供了很多快速使用redis的api,而不需要自己來維護連接,事務。最初的時候,我創建的BaseRedisDao是繼承自這個類別的。繼承的好處是我的每個Dao中,都可以自由的控制序列化器,自由的控制自己是否需要事務,這個先不需要了解,跟著我目前的這種配置方法來即可。 template提供了一系列的operation,例如valueOperation,HashOperation,ListOperation,SetOperation等,用來操作不同資料類型的Redis。並且,RedisTemplate也提供了對應的*OperationsEditor,用來透過RedisTemplate直接注入對應的Operation。
核心程式碼:
package com.npf.dao.impl;
#
# import java.util.ArrayList;
# import java.util.List;
# import java.util.Map;
import java.util.Map.Entry;
#
# import javax.annotation.Resource;
#
# import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.HashOperations;
# import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Repository;
# 導入 com.npf.dao.StudentDao;
導入 com.npf.model.Student;
@儲存庫
# 公共類別 StudentDaoImpl 實作 StudentDao{
# @Autowired
# 私有 RedisTemplate
redis模板; @Resource(name="redisTemplate")
私有 HashOperations
opsForHash; 公共靜態最終字符串學生=“學生”;
@覆蓋
公無效保存(學生學生){
# opsForHash.put(學生,學生.getId(),學生);
}
# @覆蓋
公共學生查找(字串id){
# 學生學生 = opsForHash.get(STUDENT, id);
回國學生;
}
# @覆蓋
公無效刪除(字串id){
# opsForHash.delete(學生, id);
}
# @覆蓋
公開無效更新(學生學生){
# opsForHash.put(學生,學生.getId(),學生);
}
# @覆蓋
公開列表找到所有() { ########### 地圖條目 = opsForHash.entries(學生);
列表 StuList = new ArrayList
(); for(Entry
entry:entries.entrySet()){ # StuList.add(entry.getValue());
}
# 返回stuList;
}
# }
# 控制層程式碼如下:
包 com.npf.controller;
導入 java.util.List;
導入 java.util.UUID;
導入 org.springframework.beans.factory.annotation.Autowired;
導入org.springframework.stereotype.Controller;
導入org.springframework.ui.Model;
導入 org.springframework.web.bind.annotation.RequestMapping;
導入 org.springframework.web.bind.annotation.RequestParam;
導入 com.npf.model.Student;
導入 com.npf.service.StudentService;
# @控制器 ########### 公共類別 StudentController {
# @Autowired
# 私人學生服務學生服務;
@RequestMapping("/student/save")
# 公有字串 saveStudent(學生學生){
# String id = UUID.randomUUID().toString();
System.out.println(id);
學生.setId(id);
StudentService.save(學生);
return「重定向:/student/find/all」;
}
# @RequestMapping("/student/update")
# 公共字串 updateStudent(學生學生){
# StudentService.update(學生);
return「重定向:/student/find/all」;
}
# @RequestMapping("/student/to/save/form")
# 公有字串toSaveStudentForm(){
返回「保存」;
}
# @RequestMapping("/student/delete")
# 公共字串deleteStudent(@RequestParam(“id”)字串id){
# StudentService.delete(id);
return「重定向:/student/find/all」;
}
# @RequestMapping("/student/to/update/form")
public String toUpdateStudentForm(@RequestParam("id") String id,Model model){
學生stu=studentService.find(id);
model.addAttribute("stu", stu);
返回“更新”;
}
# @RequestMapping("/student/find/all")
# 公共字串findStudents(模型模型){
列表 StuList=studentService.findAll();
model.addAttribute("stuList", stuList);
返回“列表”;
}
#
##
以上是怎麼設定使用redis的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Redis的核心功能是高性能的內存數據存儲和處理系統。 1)高速數據訪問:Redis將數據存儲在內存中,提供微秒級別的讀寫速度。 2)豐富的數據結構:支持字符串、列表、集合等,適應多種應用場景。 3)持久化:通過RDB和AOF方式將數據持久化到磁盤。 4)發布訂閱:可用於消息隊列或實時通信系統。

Redis支持多種數據結構,具體包括:1.字符串(String),適合存儲單一值數據;2.列表(List),適用於隊列和棧;3.集合(Set),用於存儲不重複數據;4.有序集合(SortedSet),適用於排行榜和優先級隊列;5.哈希表(Hash),適合存儲對像或結構化數據。

Redis計數器是一種使用Redis鍵值對存儲來實現計數操作的機制,包含以下步驟:創建計數器鍵、增加計數、減少計數、重置計數和獲取計數。 Redis計數器的優勢包括速度快、高並發、持久性和簡單易用。它可用於用戶訪問計數、實時指標跟踪、遊戲分數和排名以及訂單處理計數等場景。

使用 Redis 命令行工具 (redis-cli) 可通過以下步驟管理和操作 Redis:連接到服務器,指定地址和端口。使用命令名稱和參數向服務器發送命令。使用 HELP 命令查看特定命令的幫助信息。使用 QUIT 命令退出命令行工具。

Redis集群模式通過分片將Redis實例部署到多個服務器,提高可擴展性和可用性。搭建步驟如下:創建奇數個Redis實例,端口不同;創建3個sentinel實例,監控Redis實例並進行故障轉移;配置sentinel配置文件,添加監控Redis實例信息和故障轉移設置;配置Redis實例配置文件,啟用集群模式並指定集群信息文件路徑;創建nodes.conf文件,包含各Redis實例的信息;啟動集群,執行create命令創建集群並指定副本數量;登錄集群執行CLUSTER INFO命令驗證集群狀態;使

要從 Redis 讀取隊列,需要獲取隊列名稱、使用 LPOP 命令讀取元素,並處理空隊列。具體步驟如下:獲取隊列名稱:以 "queue:" 前綴命名,如 "queue:my-queue"。使用 LPOP 命令:從隊列頭部彈出元素並返回其值,如 LPOP queue:my-queue。處理空隊列:如果隊列為空,LPOP 返回 nil,可先檢查隊列是否存在再讀取元素。

Redis 集群中使用 zset:zset 是一種有序集合,將元素與評分關聯。分片策略: a. 哈希分片:根據 zset 鍵的哈希值分佈。 b. 範圍分片:根據元素評分劃分為範圍,並將每個範圍分配給不同的節點。讀寫操作: a. 讀操作:如果 zset 鍵屬於當前節點的分片,則在本地處理;否則,路由到相應的分片。 b. 寫入操作:始終路由到持有 zset 鍵的分片。

如何清空 Redis 數據:使用 FLUSHALL 命令清除所有鍵值。使用 FLUSHDB 命令清除當前選定數據庫的鍵值。使用 SELECT 切換數據庫,再使用 FLUSHDB 清除多個數據庫。使用 DEL 命令刪除特定鍵。使用 redis-cli 工具清空數據。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

記事本++7.3.1
好用且免費的程式碼編輯器

Dreamweaver Mac版
視覺化網頁開發工具

SublimeText3 Linux新版
SublimeText3 Linux最新版