服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - SpringBoot Redis批量存取数据的操作

SpringBoot Redis批量存取数据的操作

2021-11-05 09:53张志翔ۤ Java教程

这篇文章主要介绍了SpringBoot Redis批量存取数据的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

SpringBoot Redis批量存取数据

springboot中的redisTemplate封装了redis批处理数据的接口,我们使用redisTemplate可以直接进行批量数据的get和set。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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() 来做就可以了,过期时间单位是秒,相关代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/**
 * 合同批量导入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批量写入数据

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/**
    * 批量写入数据
    * @param objectMap
    * @return
    */
   public void saveMap(final Map<String,Object> objectMap) {
       //序列化成字节数组
       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;
           }
       });
   }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://vegetable-chicken.blog.csdn.net/article/details/102553511

延伸 · 阅读

精彩推荐
  • Java教程spring循环注入异常问题的解决方案

    spring循环注入异常问题的解决方案

    今天小编就为大家分享一篇关于spring循环注入异常问题的解决方案,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随...

    chengxu20116662021-06-20
  • Java教程Java排序算法之堆排思想及代码实现

    Java排序算法之堆排思想及代码实现

    今天小编就为大家分享一篇关于Java排序算法之堆排思想及代码实现,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随...

    sdr_zd8992021-06-26
  • Java教程MyBatis与Hibernate的比较

    MyBatis与Hibernate的比较

    Hibernate 与Mybatis都是流行的持久层开发框架,但Hibernate开发社区相对多热闹些,支持的工具也多,更新也快,当前最高版本4.1.8。而Mybatis相对平静,工具较...

    alicejiyayun2742020-03-24
  • Java教程java自加和自减运算过程

    java自加和自减运算过程

    这篇文章主要介绍了java自加和自减运算过程,非常不错,具有参考借鉴价值,需要的朋友可以参考下...

    众里寻他壹贰度3082020-08-30
  • Java教程基于Java编写串口通信工具

    基于Java编写串口通信工具

    这篇文章主要为大家详细介绍了基于Java编写的一个带有图形界面的简单串口通信工具,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 ...

    Dreamer-15692020-07-15
  • Java教程MyBatis Generator的简单使用方法示例

    MyBatis Generator的简单使用方法示例

    这篇文章主要给大家介绍了关于MyBatis Generator的简单使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要...

    转行当司机4212021-08-08
  • Java教程快速解决code唯一码(java)的简便方法

    快速解决code唯一码(java)的简便方法

    下面小编就为大家带来一篇快速解决code唯一码(java)的简便方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    Java教程网3622020-12-10
  • Java教程Java输出链表倒数第k个节点

    Java输出链表倒数第k个节点

    这篇文章主要介绍了Java输出链表倒数第k个节点的相关内容,涉及三种设计思路及代码示例,具有一定参考价值,需要的朋友可以了解下。...

    lilivian10552021-01-19