redis - 如何在redis中获取用户的所有密钥
问题描述
我目前正在研究使用redis来管理星号的黑白名单来管理垃圾邮件呼叫。由于 redis 是一个键值存储,因此检查电话号码是否在数据库中非常好。我可以在商店的价值部分存储一些额外的信息,并使用电话号码作为密钥。我的 2 个问题是 A) 一个电话号码可能在密钥中出现多次,因为它适用于不同的用户。因此,由于密钥在 db 中必须是唯一的,因此我认为最好的方法是使用用户:电话号码之类的密钥。有没有一种方法可以获取给定用户的所有记录:在密钥中,或者如果我有完整的密钥,我只能获取数据
B)当我将电话号码存储为密钥时,我可以使用 user:+2135551212 之类的东西还是 + 键会导致问题?
解决方案
要回答您的第一个问题:不,您不需要完整的密钥来获取给定用户的所有记录。Redis 提供了通配符匹配项,您可以在自己的情况下使用这些匹配项。例如:
127.0.0.1:6379> set john:1234567890 johnOne
OK
127.0.0.1:6379> set john:0987654321 johnTwo
OK
127.0.0.1:6379> keys john*
1) "john:1234567890"
2) "john:0987654321"
127.0.0.1:6379>
我设置了两个键,用户 'john' 后跟不同的电话号码,所以当我需要所有以 john 开头的键时,我们可以使用 'keys john*' 来获取所有以 'john' 开头的键。
要回答您的第二部分,是的,您可以毫无问题地在键中使用“+”。再举个例子:
127.0.0.1:6379> set user:+1234567890 helloagain
OK
推荐阅读
- c# - 从域外发送 WMI/CIM 请求
- angular - 如何在 wavesurfer.js 音频容器 div 中放置一个图标或将其放置在另一个 div 中并使外部 div 显示为 flex?
- html - 站点标题中 flex 元素的对齐方式
- java - 为什么 .java 文件在 github 存储库的 src 文件夹中显示为 .class 文件?
- reactjs - TypeError:无法解构“选项”的属性“仪器”,因为它未定义
- python - Plotly choropleth_mapbox 不显示多边形
- python - 为kivy上的按钮添加图像
- vba - 在 MS Access 中将行转换/转置为列
- java - 为什么我的 Spring Boot 应用程序无法随机获取 CSS 和 JS 文件?
- amazon-ec2 - 安装 kubectl 后“-bash: /home/ec2-user/bin/kubectl: Permission denied”