日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Redis中Pipeline的使用

發(fā)布時間:2023/12/9 数据库 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis中Pipeline的使用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

寫在前面: 我們通常是通過使用RedisTemplate每次執(zhí)行一個命令,這在命令不多的情況下是可以接收的,當(dāng)我們需要執(zhí)行大量的命令時,如果一條一條的執(zhí)行,就會因?yàn)橥ㄐ糯螖?shù)的增加而產(chǎn)生延遲。因此,Redis也引入了pipeline的機(jī)制來提升性能,我們可以通過pipeline將所有需要執(zhí)行的命令,一次性的提交給Redis的服務(wù)端,然后挨個執(zhí)行,這樣就會大大的減少通信次數(shù),從而提升性能。當(dāng)然了,需要注意的是:輸入的所有命令中:一個命令的執(zhí)行結(jié)果不影響另一個命令的輸入

1、兩種調(diào)用方式

在Spring環(huán)境下,使用Redis的Pipeline也是很簡單的:只需要調(diào)用redisTemplate的executePipelined方法就可以了,但是在參數(shù)中提供了兩種回調(diào)方式:SessionCallback、RedisCallback,兩種使用方式如下:

RedisCallback:

List list = redisTemplate.executePipelined(new RedisCallback<String>() {@Overridepublic String doInRedis(RedisConnection con) throws DataAccessException {con.set("key".getBytes(StandardCharsets.UTF_8), "value".getBytes(StandardCharsets.UTF_8));con.set("key2".getBytes(StandardCharsets.UTF_8), "value2".getBytes(StandardCharsets.UTF_8));con.set("num".getBytes(StandardCharsets.UTF_8), "0".getBytes(StandardCharsets.UTF_8));con.incr("num".getBytes(StandardCharsets.UTF_8));return null; // 切記此處要返回null,否則會拋出InvalidDataAccessApiUsageException異常}});System.out.println(Arrays.toString(list.toArray())); // [true, true, true, 1]

SessionCallback:

List list = redisTemplate.executePipelined(new SessionCallback<String>() {@Overridepublic String execute(RedisOperations operations) throws DataAccessException {operations.opsForZSet().intersectAndStore(firstKey, secondKey, destKey);redisTemplate.opsForZSet().reverseRange(destKey, 0, 10);return null; // 切記此處要返回null,否則會拋出InvalidDataAccessApiUsageException異常}});

區(qū)別:

SessionCallback封裝的更好一點(diǎn),對程序員直接調(diào)用比較友好;RedisCallback相對而言更加的底層一點(diǎn),對程序員不是很友好;開發(fā)中是推薦使用前者的,即SessionCallback

2、注意點(diǎn)

需要切記的是回調(diào)中的返回值必須是null才可以,否則會拋出InvalidDataAccessApiUsageException異常,相關(guān)源碼如下:

說到這里,那就有人問了,我需要獲取命令返回的值怎么辦呢?不得不說這是一個好問題,大家注意下,這個回調(diào)的返回值是一個List集合,我們在回調(diào)里操作的命令的返回值都依次的被收集到了這個集合中反悔了,我們需要哪個命令的返回值,直接在List中拿就可以了,比如例子二中我們需要獲取第二條命令返回的Set集合,我們只需要 **(Set)list.get(1)**即可

總結(jié)

以上是生活随笔為你收集整理的Redis中Pipeline的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。