redisTemplate方法操作redis
最近專案做完了,發現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();