欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot Redis批量存取數據的操作

 更新時間:2021年08月04日 12:11:02   作者:張志翔ۤ  
這篇文章主要介紹了SpringBoot Redis批量存取數據的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

SpringBoot Redis批量存取數據

springboot中的redisTemplate封裝了redis批處理數據的接口,我們使用redisTemplate可以直接進行批量數據的get和set。

package com.huateng.applacation.service; 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.dao.DataAccessException;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component; 
import java.util.List;
 
/**
 * @program: applacation
 * @description:
 * @author: daiwenlong
 * @create: 2019-01-24 13:26
 **/
@Component
public class RedisService {  
    @Autowired
    @Qualifier("stringRedisTemplate")
    private StringRedisTemplate redisTemplate; 
    public void insertKey(List<String> keys, String value){ 
 
        //批量get數據
        List<Object> list = redisTemplate.executePipelined(new RedisCallback<String>() {
            @Override
            public String doInRedis(RedisConnection connection) throws DataAccessException {
                for (String key : keys) {
                    connection.get(key.getBytes());
                }
                return null;
            }
        });
 
        //批量set數據
        redisTemplate.executePipelined(new RedisCallback<String>() {
            @Override
            public String doInRedis(RedisConnection connection) throws DataAccessException {
                for (int i=0;i<keys.size();i++) {
                    connection.set(keys.get(i).getBytes(),value.getBytes());
                }
                return null;
            }
        }); 
    }
}

如果要設置 key 的過期時間,通過 setEx() 來做就可以了,過期時間單位是秒,相關代碼如下:

/**
 * 合同批量導入redis
 *
 * @param contractBOList
 * @param expire
 * @return com.openailab.oascloud.common.model.ResponseResult
 * @author zxzhang
 * @date 2019/10/14
 */
@Override
public void contractBatchSetRedis(String contractBOList, long expire) {
    List<ContractBO> contracts = JSONObject.parseArray(contractBOList, ContractBO.class);
    if (contracts == null || contracts.size() == 0) {
        return;
    }
    //批量set數據
    redisUtil.getRedisTemplate().executePipelined((RedisCallback<String>) connection -> {
        for (ContractBO contract : contracts) {
            connection.setEx((RedisPrefixConst.CONTRACT_PREFIX + contract.getBusinessCode() + RedisPrefixConst.UNDERLINE_SEPARATOR + contract.getContractNo()).getBytes(), expire, JSONObject.toJSONString(contract).getBytes());
        }
        return null;
    });
}
 
/**
 * 合同批量獲取redis
 *
 * @param contractBOList
 * @return java.lang.String
 * @author zxzhang
 * @date 2019/10/14
 */
@Override
public List<Object> contractBatchGetRedis(String contractBOList) {
    List<ContractBO> contracts = JSONObject.parseArray(contractBOList, ContractBO.class);
    if (contracts == null || contracts.size() == 0) {
        return null;
    }
    List<Object> list = redisUtil.getRedisTemplate().executePipelined((RedisCallback<String>) connection -> {
        for (ContractBO contract : contracts) {
            connection.get((RedisPrefixConst.CONTRACT_PREFIX + contract.getBusinessCode() + RedisPrefixConst.UNDERLINE_SEPARATOR + contract.getContractNo()).getBytes());
        }
        return null;
    });
    return list;
}

SpringBoot對redis批量存取介紹到此結束。

redisTemplate批量寫入數據

 /**
     * 批量寫入數據
     * @param objectMap
     * @return
     */
    public void saveMap(final Map<String,Object> objectMap) {
        //序列化成字節(jié)數組
        final Map<byte[],byte[]> byteMap=new HashMap<>();
        for(Map.Entry<String,Object> objectEntry:objectMap.entrySet()){
            String key=objectEntry.getKey();
            final byte[] keyBytes = redisTemplate.getStringSerializer().serialize(key);
            Object value=objectEntry.getValue();
            final byte[] valueBytes =SerializeUtil.serialize(value);
            byteMap.put(keyBytes,valueBytes);
        }
 
        redisTemplate.execute(new RedisCallback<Object>() {
            @Override
            public Object doInRedis(RedisConnection connection) {
                try{
                    connection.mSet(byteMap);
                }catch (Exception ex){
                    log.error("redis批量寫入數據異常:"+ex.getMessage(),ex);
                }
                return null;
            }
        });
    }

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Java常用集合與原理解析

    Java常用集合與原理解析

    這篇文章主要介紹了Java常用集合與原理解析,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • SpringBoot視圖解析實現原理深入分析

    SpringBoot視圖解析實現原理深入分析

    視圖解析其實就是SpringBoot某一個controller的方法執(zhí)行完成之后,它是跳轉到那個頁面。由于我們springboot項目默認打包為jar包,是形成壓縮包的形式,而jsp又不支持壓縮,所以我們SpringBoot不知JSP的,需要引入第三方模板引擎才可以處理
    2022-10-10
  • 到底如何設置Java線程池的大小的方法示例

    到底如何設置Java線程池的大小的方法示例

    在我們日常業(yè)務開發(fā)過程中,或多或少都會用到并發(fā)的功能。那么并發(fā)線程池到底設置多大呢?文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • 如何在 Java 中實現一個 redis 緩存服務

    如何在 Java 中實現一個 redis 緩存服務

    為什么要使用緩存?說到底是為了提高系統(tǒng)的運行速度。將用戶頻繁訪問的內容存放在離用戶最近,訪問速度最快的地方,提高用戶的響應速度。下面我們來一起深入學習一下吧
    2019-06-06
  • Java并發(fā)之ReentrantLock類源碼解析

    Java并發(fā)之ReentrantLock類源碼解析

    這篇文章主要為大家詳細介紹了Java并發(fā)系列之ReentrantLock源碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Springboot集成JSR303參數校驗的方法實現

    Springboot集成JSR303參數校驗的方法實現

    這篇文章主要介紹了Springboot集成JSR303參數校驗的方法實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • 從SpringMVC遷移到Springboot的方法步驟

    從SpringMVC遷移到Springboot的方法步驟

    本篇文章主要介紹了從SpringMVC遷移到Springboot的方法步驟,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • 詳解Servlet入門級設置(超詳細 IDEA2020版)

    詳解Servlet入門級設置(超詳細 IDEA2020版)

    這篇文章主要介紹了詳解Servlet入門級設置(超詳細 IDEA2020版),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • Java 實戰(zhàn)項目之精美物流管理系統(tǒng)的實現流程

    Java 實戰(zhàn)項目之精美物流管理系統(tǒng)的實現流程

    讀萬卷書不如行萬里路,只學書上的理論是遠遠不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SpringBoot+Vue+maven+Mysql實現一個精美的物流管理系統(tǒng),大家可以在過程中查缺補漏,提升水平
    2021-11-11
  • 一篇文章徹底弄懂Java中二叉樹

    一篇文章徹底弄懂Java中二叉樹

    二叉樹是有限個節(jié)點的集合,這個集合可以是空集,也可以是一個根節(jié)點和兩顆不相交的子二叉樹組成的集合,其中一顆樹叫根的左子樹,另一顆樹叫右子樹,這篇文章主要給大家介紹了一篇文章如何徹底弄懂Java中二叉樹的相關資料,需要的朋友可以參考下
    2022-01-01

最新評論