搜尋
首頁資料庫Redis怎麼設定使用redis

怎麼設定使用redis

May 31, 2023 pm 11:31 PM
redis

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中配置如下:

  1.   

  2.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  

  3.     xmlns:context="http://www.springframework.org/schema/context"      

  4. #########################################################################。     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                ###
  5. #

  6. 豆>

  7. ;

  8. ;

  9. 豆>

  10. ;

  11. >

  12. >

  13. >

  14. 豆>

  15. 豆>

database.properties檔案如下:

  1. # redis.maxIdle=10  

  2. # redis.maxActive=20  

  3. # redis.maxWait=10000  

  4. redis.testOnBorrow=true  

  5. # redis.host=192.168.1.76  

  6. # redis.port=6379  

  7. # 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。
核心程式碼:

  1. package com.npf.dao.impl;  

  2. #   

  3. # import java.util.ArrayList;  

  4. # import java.util.List;  

  5. # import java.util.Map;  

  6. import java.util.Map.Entry;  

  7. #   

  8. # import javax.annotation.Resource;  

  9. #   

  10. # import org.springframework.beans.factory.annotation.Autowired;  

  11. import org.springframework.data.redis.core.HashOperations;  

  12. # import org.springframework.data.redis.core.RedisTemplate;  

  13. import org.springframework.stereotype.Repository;  

  14. # 導入 com.npf.dao.StudentDao;

  15. 導入 com.npf.model.Student;

  16. @儲存庫

  17. # 公共類別 StudentDaoImpl 實作 StudentDao{  

  18. # @Autowired

  19. # 私有 RedisTemplate redis模板;

  20. @Resource(name="redisTemplate")  

  21. 私有 HashOperations opsForHash;

  22. 公共靜態最終字符串學生=“學生”;

  23. @覆蓋

  24. 公無效保存(學生學生){  

  25. # opsForHash.put(學生,學生.getId(),學生);

  26. }  

  27. # @覆蓋

  28. 公共學生查找(字串id){  

  29. # 學生學生 = opsForHash.get(STUDENT, id);

  30. 回國學生;

  31. }  

  32. # @覆蓋

  33. 公無效刪除(字串id){  

  34. # opsForHash.delete(學生, id);

  35. }  

  36. # @覆蓋

  37. 公開無效更新(學生學生){  

  38. # opsForHash.put(學生,學生.getId(),學生);

  39. }  

  40. # @覆蓋

  41. 公開列表找到所有() { ########### 地圖條目 = opsForHash.entries(學生);

  42. 列表 StuList = new ArrayList();

  43. for(Entryentry:entries.entrySet()){  

  44. # StuList.add(entry.getValue());

  45. }  

  46. # 返回stuList;

  47. }  

  48. # }  

  49. # 控制層程式碼如下:

包 com.npf.controller;

  1. 導入 java.util.List;

  2. 導入 java.util.UUID;

  3. 導入 org.springframework.beans.factory.annotation.Autowired;

  4. 導入org.springframework.stereotype.Controller;

  5. 導入org.springframework.ui.Model;

  6. 導入 org.springframework.web.bind.annotation.RequestMapping;

  7. 導入 org.springframework.web.bind.annotation.RequestParam;

  8. 導入 com.npf.model.Student;

  9. 導入 com.npf.service.StudentService;

  10. # @控制器 ########### 公共類別 StudentController {  

  11. # @Autowired

  12. # 私人學生服務學生服務;

  13. @RequestMapping("/student/save")  

  14. # 公有字串 saveStudent(學生學生){  

  15. # String id = UUID.randomUUID().toString();

  16. System.out.println(id);

  17. 學生.setId(id);

  18. StudentService.save(學生);

  19. return「重定向:/student/find/all」;

  20. }  

  21. # @RequestMapping("/student/update")  

  22. # 公共字串 updateStudent(學生學生){  

  23. # StudentService.update(學生);

  24. return「重定向:/student/find/all」;

  25. }  

  26. # @RequestMapping("/student/to/save/form")  

  27. # 公有字串toSaveStudentForm(){  

  28. 返回「保存」;

  29. }  

  30. # @RequestMapping("/student/delete")  

  31. # 公共字串deleteStudent(@RequestParam(“id”)字串id){  

  32. # StudentService.delete(id);

  33. return「重定向:/student/find/all」;

  34. }  

  35. # @RequestMapping("/student/to/update/form")  

  36. public String toUpdateStudentForm(@RequestParam("id") String id,Model model){  

  37. 學生stu=studentService.find(id);

  38. model.addAttribute("stu", stu);

  39. 返回“更新”;

  40. }  

  41. # @RequestMapping("/student/find/all")  

  42. # 公共字串findStudents(模型模型){  

  43. 列表 StuList=studentService.findAll();

  44. model.addAttribute("stuList", stuList);

  45. 返回“列表”;

  46. }  

  47. #  

  48. ##

以上是怎麼設定使用redis的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:亿速云。如有侵權,請聯絡admin@php.cn刪除
REDIS:確定其主要功能REDIS:確定其主要功能Apr 12, 2025 am 12:01 AM

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

REDIS:流行數據結構指南REDIS:流行數據結構指南Apr 11, 2025 am 12:04 AM

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

redis計數器怎麼實現redis計數器怎麼實現Apr 10, 2025 pm 10:21 PM

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

redis命令行怎麼用redis命令行怎麼用Apr 10, 2025 pm 10:18 PM

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

redis集群模式怎麼搭建redis集群模式怎麼搭建Apr 10, 2025 pm 10:15 PM

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

redis怎麼讀取隊列redis怎麼讀取隊列Apr 10, 2025 pm 10:12 PM

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

redis集群zset怎麼使用redis集群zset怎麼使用Apr 10, 2025 pm 10:09 PM

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

redis數據怎麼清空redis數據怎麼清空Apr 10, 2025 pm 10:06 PM

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

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MinGW - Minimalist GNU for Windows

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

SAP NetWeaver Server Adapter for Eclipse

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

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版