關于Redis事務和pipleline

下面由redis教程欄目給大家介紹關于redis事務和pipleline,希望對需要的朋友有所幫助!

關于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
喜歡就支持一下吧
點贊8 分享