Redis使用RedisTemplate模板類的常用操作方式
一、前言
Redis是一個(gè)NoSQL(非關(guān)系型數(shù)據(jù)庫(kù))數(shù)據(jù)庫(kù)之一,key-value存儲(chǔ)系統(tǒng)或者說是一個(gè)緩存鍵值對(duì)數(shù)據(jù)庫(kù),具有如下特性:
- 基于內(nèi)存運(yùn)行,性能高效
- 支持分布式,理論上可以無限擴(kuò)展
- key-value存儲(chǔ)系統(tǒng)
- 開源的使用ANSI C語言編寫、遵守BSD協(xié)議、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫(kù),并提供多種語言的API
主要應(yīng)用場(chǎng)景包括:
緩存系統(tǒng)、計(jì)數(shù)器、消息隊(duì)列系統(tǒng)、排行榜、社交網(wǎng)絡(luò)和實(shí)時(shí)系統(tǒng)、分布式鎖和發(fā)布/訂閱消息等。
而在程序中,對(duì)Redis的常用操作有一個(gè)專門用于操作Redis的模板類(或API),它就是RedisTemplate。
二、Redis 數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)介
Redis可以存儲(chǔ)鍵與5種不同數(shù)據(jù)結(jié)構(gòu)類型之間的映射,這5種數(shù)據(jù)結(jié)構(gòu)類型分別為String(字符串)、List(列表)、Set(集合)、Hash(散列)和 Zset(有序集合)。
下面來對(duì)這5種數(shù)據(jù)結(jié)構(gòu)類型作簡(jiǎn)單的介紹:
| 結(jié)構(gòu)類型 | 結(jié)構(gòu)存儲(chǔ)的值 | 結(jié)構(gòu)的讀寫能力 |
|---|---|---|
| String | 字符串、整數(shù)或者浮點(diǎn)數(shù) | 對(duì)整個(gè)字符串或者字符串的其中一部分執(zhí)行操作;對(duì)象和浮點(diǎn)數(shù)執(zhí)行自增(increment)或者自減(decrement) |
| List | 數(shù)組鏈表,鏈表上的每個(gè)節(jié)點(diǎn)都包含了一個(gè)元素 | 從鏈表的兩端推入或者彈出元素;根據(jù)偏移量對(duì)鏈表進(jìn)行修剪(trim);讀取單個(gè)或者多個(gè)元素;根據(jù)值來查找或者移除元素 |
| Set | 包含元素的無序收集器(unorderedcollection),并且被包含的每個(gè)元素都是獨(dú)一無二的、各不相同 | 添加、獲取、移除單個(gè)元素;檢查一個(gè)元素是否存在于某個(gè)集合中;計(jì)算交集、并集、差集;從集合里賣弄隨機(jī)獲取元素 |
| Hash | 包含鍵值對(duì)的無序散列表 | 添加、獲取、移除單個(gè)鍵值對(duì);獲取所有鍵值對(duì) |
| Zset | 字符串成員(member)與浮點(diǎn)數(shù)分值(score)之間的有序映射,元素的排列順序由分值的大小決定 | 添加、獲取、刪除單個(gè)元素;根據(jù)分值范圍(range)或者成員來獲取元素 |
RedisTemplate位于spring-data-redis包下:
package org.springframework.data.redis.core; public class RedisTemplate<K, V> extends org.springframework.data.redis.core.RedisAccessor implements org.springframework.data.redis.core.RedisOperations<K, V>
繼承了RedisAccessor類,實(shí)現(xiàn)了RedisOperations泛型鍵值對(duì)接口。
使用注解即可引用RedisTemplate:
@Autowired private RedisTemplate<String,String> redisTemplate;
三、RedisTemplate對(duì)5種數(shù)據(jù)結(jié)構(gòu)的操作
redisTemplate使用如下幾種方法分別針對(duì)5種數(shù)據(jù)結(jié)構(gòu)進(jìn)行操作:
redisTemplate.opsForValue();//操作字符串 redisTemplate.opsForHash();//操作hash redisTemplate.opsForList();//操作list redisTemplate.opsForSet();//操作set redisTemplate.opsForZSet();//操作有序set
3.1 String字符串操作
//設(shè)置key和value值
redisTemplate.opsForValue().set("key","value");
//通過key獲取value值
String result = redisTemplate.opsForValue().get("key").toString();
3.2 list數(shù)組操作
//list數(shù)組對(duì)象和添加數(shù)組值
List<String> list = new ArrayList<String>();
list.add("a1");
list.add("a2");
list.add("a3");
//用redisTemplate模板類把list數(shù)組集合添加進(jìn)Redis
redisTemplate.opsForList().leftPush("listkey",list);
//用redisTemplate模板類從Redis中根據(jù)key獲取list集合
List<String> resultList = (List<String>)redisTemplate.opsForList().leftPop("listkey");
3.3 Hash結(jié)構(gòu),map操作
//定義Map集合和類型
Map<String,String> map = new HashMap<String,String>();
map.put("key1","value1");
map.put("key2","value2");
map.put("key3","value3");
//用redis模板類把map設(shè)置到redis中
redisTemplate.opsForHash().putAll("map",map);
Map<String,String> resultMap = redisTemplate.opsForHash().entries("map");
List<String> reslutMapList = redisTemplate.opsForHash().values("map");
Set<String> resultMapSet = redisTemplate.opsForHash().keys("map");
String value = (String)redisTemplate.opsForHash().get("map","key1");
3.4 Set集合操作
//定義一個(gè)set集合并設(shè)置集合值
SetOperations<String, String> set = redisTemplate.opsForSet();
set.add("set1","22");
set.add("set1","33");
set.add("set1","44");
//通過key獲取set集合中的對(duì)象值
Set<String> resultSet = redisTemplate.opsForSet().members("set1");
四、總結(jié)
以上就是Redis的幾種常用數(shù)據(jù)結(jié)構(gòu)和操作。
很多互聯(lián)網(wǎng)大廠都有用Redis在各種業(yè)務(wù)場(chǎng)景進(jìn)行使用,如今分布式流行的趨勢(shì),Redis更是舉足輕重不可不掌握的一個(gè)技術(shù);除了Redis,還有MemCache、Cassadra和Mongo等NoSQL。
希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- 使用@Autowired 注入RedisTemplate報(bào)錯(cuò)的問題及解決
- springboot使用redisTemplate操作lua腳本
- SpringBoot整合Redis使用@Cacheable和RedisTemplate
- 使用redisTemplate從redis獲取所有數(shù)據(jù)
- Java使用RedisTemplate如何根據(jù)前綴獲取key列表
- 關(guān)于RedisTemplate之opsForValue的使用說明
- SpringBoot使用RedisTemplate.delete刪除指定key失敗的解決辦法
- RedisTemplate中opsForValue和opsForList方法的使用詳解
- Redis Template使用詳解示例教程
相關(guān)文章
Java實(shí)現(xiàn)解析第三方接口返回的json
在實(shí)際開發(fā)過程中,免不了和其他公司進(jìn)行聯(lián)調(diào),調(diào)用第三方接口,這個(gè)時(shí)候我們就需要根據(jù)對(duì)方返回的數(shù)據(jù)進(jìn)行解析,獲得我們想要的字段,下面我們就來看看具體有哪些方法吧2024-01-01
基于Mybatis Plus實(shí)現(xiàn)代碼生成器CodeGenerator
這篇文章主要介紹了基于Mybatis Plus實(shí)現(xiàn)代碼生成器CodeGenerator,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
SpringBoot中使用MQTT實(shí)現(xiàn)消息的訂閱和發(fā)布(示例代碼)
這篇文章主要介紹了SpringBoot中使用MQTT實(shí)現(xiàn)消息的訂閱和發(fā)布的相關(guān)知識(shí),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-06-06
在Spring?MVC中使用@ControllerAdvice創(chuàng)建全局異常處理器的方法
在Spring?MVC中,可以使用@ControllerAdvice或@RestControllerAdvice注解來定義全局異常處理器類,并使用?@ExceptionHandler注解來定義處理特定異常的方法,本文就給大家介紹了Spring?MVC?@ControllerAdvice創(chuàng)建處理器的方法,需要的朋友可以參考下2023-08-08
java 四舍五入保留小數(shù)的實(shí)現(xiàn)方法
下面小編就為大家?guī)硪黄猨ava 四舍五入保留小數(shù)的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-09-09
Java split函數(shù)拆分后變成null問題解決方案
這篇文章主要介紹了Java split函數(shù)拆分后變成null問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10

