最近項目做完了,發現redis教程看了不少,但是在redisTemplate還是有好多方法沒怎么用過,在此學習記錄下來。老版本的 Redis支持五種數據類型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。 這里也只說明這五種數據類型操作。
String操作
Redis 字符串數據類型的相關命令用於管理 redis 字符串值
// 獲取值
redisTemplate.opsForValue().get();
redisTemplate.opsForValue().multiGet();
// 設置值
redisTemplate.opsForValue().set("stone","demo",10, TimeUnit.SECONDS);
HashMap<String, Object> sets = new HashMap<>();
sets.put("test1","stone1");
sets.put("test2","stone2");
sets.put("test3","stone3");
redisTemplate.opsForValue().multiSet(sets);
// 刪除值
redisTemplate.delete();
// 原子操作
redisTemplate.opsForValue().increment();
List操作
Redis列表是簡單的字符串列表,按照插入順序排序。你可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)
一個列表最多可以包含 232 - 1 個元素 (4294967295, 每個列表超過40億個元素)。
/**
* List操作
*/
// 獲取所有list值
List<Object> lTest = redisTemplate.opsForList().range("lTest", 0,-1);
Long aLong = redisTemplate.opsForList().leftPushAll("lTest", "value1", "value2", "value3", "value4");
// 在鏈表左端添加一個元素
redisTemplate.opsForList().leftPush();
// 更新鏈表某個節點的值
redisTemplate.opsForList().set();
// 刪除隊列左邊第一個元素並返回
/**
* 進程永久堵塞,直到有值塞入
*
* Removes and returns first element from lists stored at {@code key} . <br>
* * <b>Blocks connection</b> until element available or {@code timeout} reached.
*/
redisTemplate.opsForList().leftPop("lTest",0,TimeUnit.SECONDS);
// 不會等待
redisTemplate.opsForList().leftPop("lTest");
Set操作
Redis 的 Set 是 String 類型的無序集合。集合成員是唯一的,這就意味着集合中不能出現重復的數據。
集合對象的編碼可以是 intset 或者 hashtable。
Redis 中集合是通過哈希表實現的,所以添加,刪除,查找的復雜度都是 O(1)。
集合中最大的成員數為 232 - 1 (4294967295, 每個集合可存儲40多億個成員)。
/**
* set操作 多個集合的交並集操作
*/
// 獲取set值
redisTemplate.opsForSet().members("setTest");
// 添加值
redisTemplate.opsForSet().add("setTest","test1","test2","test3","test4","test1");
redisTemplate.opsForSet().add("setTest2","test1","test2","test3","test4","test1");
// 還有很多對比set集合,取出交並集合等操作
Set<Object> setTest1 = redisTemplate.opsForSet().difference("setTest","setTest2");
redisTemplate.opsForSet().intersect();
// 刪除
redisTemplate.opsForZSet().remove();
ZSet操作
Redis 有序集合和集合一樣也是 string 類型元素的集合,且不允許重復的成員。
不同的是每個元素都會關聯一個 double 類型的分數。redis 正是通過分數來為集合中的成員進行從小到大的排序。
有序集合的成員是唯一的,但分數(score)卻可以重復。
集合是通過哈希表實現的,所以添加,刪除,查找的復雜度都是 O(1)。 集合中最大的成員數為 232 - 1 (4294967295, 每個集合可存儲40多億個成員)。
/**
* zset操作 針對zset設置的score進行操作
*/
// 獲取
Set<Object> zsetTest = redisTemplate.opsForZSet().range("zsetTest", 10, 10);
// 還有很多通過score來獲取值得操作
// 添加
redisTemplate.opsForZSet().add();
Set<ZSetOperations.TypedTuple<Object>> sets = new HashSet<>();
sets.add(new DefaultTypedTuple("test1",10d));
sets.add(new DefaultTypedTuple("test2",10d));
sets.add(new DefaultTypedTuple("test3",10d));
redisTemplate.opsForZSet().add("zsetTest",sets);
// 刪除
redisTemplate.opsForZSet().remove();
Map操作
Redis hash 是一個 string 類型的 field(字段) 和 value(值) 的映射表,hash 特別適合用於存儲對象。
Redis 中每個 hash 可以存儲 232 - 1 鍵值對(40多億)。
/**
* map操作 作用單純map存取值+原子操作
*/
// 獲取
redisTemplate.opsForHash().get();
redisTemplate.opsForHash().multiGet();
// 添加
redisTemplate.opsForHash().put();
// 刪除
redisTemplate.opsForHash().delete();
// 原子操作
redisTemplate.opsForHash().increment();