下面由redis教程欄目給大家介紹關于redis事務和pipleline,希望對需要的朋友有所幫助!
1、reidis事務
Redis 事務可以一次執行多個命令, 并且帶有以下三個重要的保證:批量操作在發送 EXEC 命令前被放入隊列緩存。收到 EXEC 命令后進入事務執行,事務中任意命令執行失敗,其余的命令依然被執行。在事務執行過程,其他客戶端提交的命令請求不會插入到事務執行命令序列中。一個事務從開始到執行會經歷以下三個階段:開始事務。命令入隊。執行事務。?MULTI 開始一個事務, 然后將多個命令入隊到事務中, 最后由 EXEC 命令觸發事務, 一并執行事務中的所有命令:1、事務執行2、watch監視一個(或多個) key ,如果在事務執行之前這個(或這些) key 被其他命令所改動,那么事務將被打斷。??3、discard取消事務,放棄執行事務塊內的所有命令。?
2、jedis代碼
1、配置支持事務
template.setEnableTransactionSupport(true);<br/>2、代碼:
redisTemplate.opsForValue().set("aaa", 321); redisTemplate.watch("aaa"); redisTemplate.multi(); redisTemplate.opsForValue().set("aaa", 123); redisTemplate.opsForValue().set("bbb", 123); redisTemplate.exec();
3、pipleline
jedis 代碼:
Map<String, Object> map = new HashMap<>(); map.put("aaa", 111); map.put("bbb", 222); map.put("ccc", 3333); List list = redisTemplate.executePipelined(new RedisCallback<Object>() { @Override public Object doInRedis(RedisConnection redisConnection) throws DataAccessException { redisConnection.openPipeline(); for (Map.Entry<String, Object> mapEntry : map.entrySet()) { redisConnection.set(redisTemplate.getKeySerializer().serialize(mapEntry.getKey()), redisTemplate.getValueSerializer().serialize(mapEntry.getValue())); } return null; } }, redisTemplate.getValueSerializer()); System.out.println(redisUtil.get("aaa")); System.out.println(redisUtil.get("bbb")); System.out.println(redisUtil.get("ccc"));
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END