一、前言
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包下:
1
2
3
4
|
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:
1
2
|
@Autowired private RedisTemplate<String,String> redisTemplate; |
三、RedisTemplate對5種數據結構的操作
redisTemplate使用如下幾種方法分別針對5種數據結構進行操作:
1
2
3
4
5
|
redisTemplate.opsForValue(); //操作字符串 redisTemplate.opsForHash(); //操作hash redisTemplate.opsForList(); //操作list redisTemplate.opsForSet(); //操作set redisTemplate.opsForZSet(); //操作有序set |
3.1 String字符串操作
1
2
3
4
|
//設置key和value值 redisTemplate.opsForValue().set( "key" , "value" ); //通過key獲取value值 String result = redisTemplate.opsForValue().get( "key" ).toString(); |
3.2 list數組操作
1
2
3
4
5
6
7
8
9
10
11
|
//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操作
1
2
3
4
5
6
7
8
9
10
11
12
|
//定義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集合操作
1
2
3
4
5
6
7
|
//定義一個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。
希望能給大家一個參考,也希望大家多多支持服務器之家。
原文鏈接:https://blog.csdn.net/xuri24/article/details/109012069