redis通用key操作命令(总)

转载:https://blog.youkuaiyun.com/qq_28893679/article/details/53005057 

redis默认是开启了16个数据库,在配置文件中可以修改,编号从0到15,默认选择的是0号数据库,通过使用select index命令来更改数据库

1.keys pattern 命令–>获取key值 
在redis里,允许模糊查询key 
有3个通配符 *, ? ,[] 
*: 通配任意多个字符 
?: 通配单个字符 
[]: 通配括号内的某1个字符

redis 127.0.0.1:6379> flushdb
OK
redis 127.0.0.1:6379> keys *
(empty list or set)
redis 127.0.0.1:6379> mset one 1 two 2 three 3 four 4
OK
redis 127.0.0.1:6379> keys o*
1) "one"
redis 127.0.0.1:6379> key *o
(error) ERR unknown command 'key'
redis 127.0.0.1:6379> keys *o
1) "two"
redis 127.0.0.1:6379> keys ???
1) "one"
2) "two"
redis 127.0.0.1:6379> keys on?
1) "one"
redis 127.0.0.1:6379> set ons yes
OK
redis 127.0.0.1:6379> keys on[eaw]
1)"one"


2.randomkey–>随机获取key值

127.0.0.1:6379> randomkey
"name"
### 批量删除 Redis 中的 Keys 在 Redis 中,可以通过 Lua 脚本来实现批量删除指定模式的 keys。以下是具体的解决方案: #### 方法一:使用 EVAL 命令执行 Lua 脚本 Redis 提供了 `EVAL` 命令来运行 Lua 脚本[^1]。下面是一个示例脚本,它会删除所有以 `'suggest*'` 为前缀的键。 ```lua -- 删除 Redis 中所有已有 'suggest' 前缀的键值对 local keys = redis.call('keys', 'suggest*') for _, key in ipairs(keys) do redis.call('del', key) end return #keys -- 返回被删除的键的数量 ``` 此脚本的工作原理如下: - 使用 `redis.call('keys', 'suggest*')` 查找所有匹配 `'suggest*'` 模式的键。 - 遍历这些键并逐一调用 `redis.call('del', key)` 进行删除。 - 最终返回被删除键的数量。 可以将上述脚本传递给 `EVAL` 命令执行,例如: ```bash EVAL "local keys = redis.call('keys', 'suggest*'); for _,key in ipairs(keys) do redis.call('del', key); end; return #keys;" 0 ``` --- #### 方法二:基于自定义 Lua 脚本的批量删除 如果需要更灵活的方式,可以根据需求编写不同的 Lua 脚本。以下是一个通用模板,适用于任意模式的键删除[^3]。 ```lua -- 使用 Lua 脚本批量删除匹配特定模式的键 local pattern = ARGV[1] local keys_to_delete = redis.call('keys', pattern) for i=1,#keys_to_delete do redis.call('del', keys_to_delete[i]) end return keys_to_delete ``` 在此脚本中: - 参数 `ARGV[1]` 表示要匹配的模式(如 `'info:*'` 或其他)。 - 使用 `redis.call('keys', pattern)` 动态获取符合条件的键列表。 - 对每个键依次调用 `redis.call('del', ...)` 完成删除操作。 执行该脚本时,需提供模式作为参数: ```bash EVAL "local pattern = ARGV[1]; local keys_to_delete = redis.call('keys', pattern); for i=1,#keys_to_delete do redis.call('del', keys_to_delete[i]); end; return keys_to_delete;" 0 info:* ``` --- #### 方法三:利用 Spring Boot 和 RedisTemplate 实现 Lua 批量操作 对于 Java 开发者,在 Spring Boot 应用程序中也可以借助 RedisTemplate 来执行 Lua 脚本[^4]。以下是一段代码示例: ```java import org.springframework.data.redis.core.RedisCallback; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.script.DefaultRedisScript; public class RedisBatchDeleteService { private final RedisTemplate<String, String> redisTemplate; public RedisBatchDeleteService(RedisTemplate<String, String> redisTemplate) { this.redisTemplate = redisTemplate; } public Long deleteKeysByPattern(String pattern) { String luaScript = "local keys = redis.call('keys', ARGV[1]); " + "for i=1,#keys do redis.call('del', keys[i]); end; " + "return #keys;"; DefaultRedisScript<Long> script = new DefaultRedisScript<>(luaScript, Long.class); return redisTemplate.execute(script, Collections.emptyList(), pattern); } } ``` 这段代码实现了通过 Lua 脚本按模式批量删除 Redis 键的功能。注意,这里使用的 `DefaultRedisScript` 类型指定了返回值为 `Long`,表示成功删除的键数。 --- ### 注意事项 尽管以上方法能够高效完成批量删除任务,但在实际生产环境中需要注意以下几点: - **性能影响**:`KEYS` 命令会对整个数据库进行扫描,可能导致高负载场景下的性能下降。建议改用 `SCAN` 替代 `KEYS`[^2]。 - **事务保障**:Lua 脚本天然支持原子性操作,因此无需额外考虑并发问题。 - **谨慎操作**:批量删除可能误删重要数据,请务必确认目标范围后再执行。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值