时间:2021-05-19
Java使用Redis删除HashMap中的key时,取出对应的HashMap后通过Java中HashMap的remove方法移除key然后重新调用redis的Hmset方法将覆盖无效
通过hdel命令删除指定HashMap中指定Key:
使用HDEL key field [field …]:
删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略
redis中的散列表在进行存储值时,只会将客户端上送的hashmap中存在的key在redis中查找对应的key值进行覆盖重写,
至于通过Java代码对该HashMap进行的remove操作在redis中并不会感知到,
所以在通过HMSET函数进行操作时,redis只会找到key覆写,不会执行del操作,实际针对redis中的hashmap key的删除只能通过HDEL函数
我们通过Jedis包中 redis.clients.jedis.BinaryClient.hmset方法的源码来看,最终发往redis服务器执行的命令时的操作
//实际上在发往redis执行命令前,会将HashMap中的转成字节数据集合public void hmset(byte[] key, Map<byte[], byte[]> hash) { List<byte[]> params = new ArrayList(); params.add(key); Iterator i$ = hash.entrySet().iterator(); while(i$.hasNext()) { Entry<byte[], byte[]> entry = (Entry)i$.next(); params.add(entry.getKey()); params.add(entry.getValue()); } this.sendCommand(Command.HMSET, (byte[][])params.toArray(new byte[params.size()][]));}实际对应的redis命令即为:
redis 127.0.0.1:6379> HSET HashKey "ruleA" "valA" "ruleB" "valB"补充:redis整体删除,整个hash删除,批量删除,单个删除,正则删除
以上三种连接数据库的方式都测试过有效,主要是后面的decode_responses参数可以省去二进制写入。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Java中,HashMap,其实就是键值对。一个Key,对应一个值;写数据时,指定Key写对应值;读取时凭Key找到相应值。感觉就跟Redis差不多。//创建H
前言Redis4.0新增了非常实用的lazyfree特性,从根本上解决BigKey(主要指定元素较多集合类型Key)删除的风险。笔者在redis运维中也遇过几次
Redis中有删除单个Key的指令DEL,但好像没有批量删除Key的指令,不过我们可以借助Linux的xargs指令来完成这个动作。复制代码代码如下:redis
在最近的开发中,我踩到一个坑,过程是这样的。我需要在Java中判断两个字符串是否相等,按照以往的经历使用==双等号的操作符来判断,但是在Java中,这样写却没有
有个业务中需要删除某个前缀的所有Redis缓存,于是用RedisTemplate的keys方法先查出所有合适的key,再遍历删除。但是在keys(patten+