一、前言
Redis是一個NoSQL(非關系型資料庫)資料庫之一,key-value存盤系統或者說是一個快取鍵值對資料庫,具有如下特性:
- 基于記憶體運行,性能高效
- 支持分布式,理論上可以無限擴展
- key-value存盤系統
- 開源的使用ANSI C語言撰寫、遵守BSD協議、支持網路、可基于記憶體亦可持久化的日志型、Key-Value資料庫,并提供多種語言的API
主要應用場景包括:快取系統、計數器、訊息佇列系統、排行榜、社交網路和實時系統、分布式鎖和發布/訂閱訊息等,而在程式中,對Redis的常用操作有一個專門用于操作Redis的模板類(或API),它就是RedisTemplate,
二、Redis 資料結構簡介
Redis可以存盤鍵與5種不同資料結構型別之間的映射,這5種資料結構型別分別為String(字串)、List(串列)、Set(集合)、Hash(散列)和 Zset(有序集合),
下面來對這5種資料結構型別作簡單的介紹:
| 結構型別 | 結構存盤的值 | 結構的讀寫能力 |
|---|---|---|
| String | 字串、整數或者浮點數 | 對整個字串或者字串的其中一部分執行操作;物件和浮點數執行自增(increment)或者自減(decrement) |
| List | 陣列鏈表,鏈表上的每個節點都包含了一個元素 | 從鏈表的兩端推入或者彈出元素;根據偏移量對鏈表進行修剪(trim);讀取單個或者多個元素;根據值來查找或者移除元素 |
| Set | 包含元素的無序收集器(unorderedcollection),并且被包含的每個元素都是獨一無二的、各不相同 | 添加、獲取、移除單個元素;檢查一個元素是否存在于某個集合中;計算交集、并集、差集;從集合里賣弄隨機獲取元素 |
| Hash | 包含鍵值對的無序散串列 | 添加、獲取、移除單個鍵值對;獲取所有鍵值對 |
| Zset | 字串成員(member)與浮點數分值(score)之間的有序映射,元素的排列順序由分值的大小決定 | 添加、獲取、洗掉單個元素;根據分值范圍(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類,實作了RedisOperations泛型鍵值對介面,
使用注解即可參考RedisTemplate:
@Autowired
private RedisTemplate<String,String> redisTemplate;
三、RedisTemplate對5種資料結構的操作
redisTemplate使用如下幾種方法分別針對5種資料結構進行操作:
redisTemplate.opsForValue();//操作字串
redisTemplate.opsForHash();//操作hash
redisTemplate.opsForList();//操作list
redisTemplate.opsForSet();//操作set
redisTemplate.opsForZSet();//操作有序set
3.1 String字串操作
//設定key和value值
redisTemplate.opsForValue().set("key","value");
//通過key獲取value值
String result = redisTemplate.opsForValue().get("key").toString();
3.2 list陣列操作
//list陣列物件和添加陣列值
List<String> list = new ArrayList<String>();
list.add("a1");
list.add("a2");
list.add("a3");
//用redisTemplate模板類把list陣列集合添加進Redis
redisTemplate.opsForList().leftPush("listkey",list);
//用redisTemplate模板類從Redis中根據key獲取list集合
List<String> resultList = (List<String>)redisTemplate.opsForList().leftPop("listkey");
3.3 Hash結構,map操作
//定義Map集合和型別
Map<String,String> map = new HashMap<String,String>();
map.put("key1","value1");
map.put("key2","value2");
map.put("key3","value3");
//用redis模板類把map設定到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集合操作
//定義一個set集合并設定集合值
SetOperations<String, String> set = redisTemplate.opsForSet();
set.add("set1","22");
set.add("set1","33");
set.add("set1","44");
//通過key獲取set集合中的物件值
Set<String> resultSet = redisTemplate.opsForSet().members("set1");
四、總結
以上就是Redis的幾種常用資料結構和操作,很多互聯網大廠都有用Redis在各種業務場景進行使用,如今分布式流行的趨勢,Redis更是舉足輕重不可不掌握的一個技術;除了Redis,還有MemCache、Cassadra和Mongo等NoSQL,
推薦閱讀更多的Redis文章:Redis快速入門 Redis的三種模式:主從、哨兵、集群
既然都看完了整篇文章,相信對你一定有所幫助,原創不易,遠離伸手黨,
點擊下方【打賞】小編,或者關注公眾號給予支持,你們的每一份鼓勵都將是小編偉大的動力,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/169966.html
標籤:其他
下一篇:Python 3求助
