需求:工作中使用kafka接收数据,需要批量对redis中的hash *** 作,而redisTemplate并没有提供相应的方法,里面对于批量插入 *** 作,只有一个
public void putAll(K key, Map extends HK, ? extends HV> m) { if (!m.isEmpty()) { byte[] rawKey = this.rawKey(key); Maphashes = new linkedHashMap(m.size()); Iterator var5 = m.entrySet().iterator(); while(var5.hasNext()) { Entry extends HK, ? extends HV> entry = (Entry)var5.next(); hashes.put(this.rawHashKey(entry.getKey()), this.rawHashValue(entry.getValue())); } this.execute((connection) -> { connection.hMSet(rawKey, hashes); return null; }); } }
这显然不是我想要的,我想要的是批量对1000个hash *** 作,而这样我还是要for循环走1000次连接。在网上找了半天没有找到对应的办法后,我参考这个写法,写了一个自己的方法。代码如下:
@SpringBootTest class SpringbootRedisApplicationTests { @Test void contextLoads() { RedisTemplate redisTemplate = (RedisTemplate) SpringContextUtil.getBean("redisTemplate"); RedisSerializer keySerializer = redisTemplate.getKeySerializer(); RedisSerializer hashKeySerializer = redisTemplate.getHashKeySerializer(); RedisSerializer hashValueSerializer = redisTemplate.getHashValueSerializer(); Map> map = new HashMap<>(); Map aMap = new HashMap<>(); aMap.put("st",1); aMap.put("time", "2021-12-1"); for (int i = 0; i < 1000; i++) { map.put(i+"", aMap); } redisTemplate.executePipelined((RedisCallback
我这是在测试类里面写的,同行们可以粘到自己的工具类里面去,传参是一个Map
// 随便取出试用 Map map = (Map)redisTemplate.opsForHash().entries("100"); System.out.println(map);
发现没有问题,这样我们就可以只用一次连接批量对hash *** 作了。
有疑问可以在评论区交流,作者看见会回复。
如需转载,请一定声明原处。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)