持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第7天,点击查看活动详情
String、总结
- String数据结构是简单的key-value类型,value其实不仅可以是String,也可以是数字。
- 常规key-value缓存应用: 常规计数:微博数,粉丝数等。
问题1:Redis没有类似MySQL中的Table的概念,我们该如何区分不同类型的key呢?
比如在我们开发一个项目中,需要将用户和产品的信息存入到id,这时用户的id和产品的id可能都为1,那我们怎么存储到redis,我们知道redis的key不能重复。
这时我们就要看一下key的结构了:
Redis的key允许有多个单词形成层级结构,多个单词之间用':'隔开,格式如下:
例如:项目名称:业务名称:类型:id
这个格式并非固定,也可以根据自己的需求来删除或添加词条。
例如我们的项目名称叫 blog,有user和product两种不同类型的数据,我们可以这样定义key:
user相关的key:blog:user:1
product相关的key:blog:product:1
如果Value是一个Java对象,例如一个User对象,则可以将对象序列化为JSON字符串后存储:
| key | value |
|---|---|
| blog:user:1 | {"id":1, "name": "xiaoming", "phone": 123456789} |
| blog:product:1 | {"id":1, "name": "huwei", "color": "red"} |
添加的数据:
'{"id":1, "name":"xiaoming", "phone": 12345678911}'
'{"id":2, "name":"xiaohong", "phone": 18212121111}'
'{"id":1, "name":"huwei", "color": "red"}'
'{"id":2, "name":"xiaomi", "color": "black"}'
127.0.0.1:6379> set blog:user:1 '{"id":1, "name": "xiaoming", "phone": 123456789}'
OK
127.0.0.1:6379> set blog:user:2 '{"id":2, "name":"xiaohong", "phone": 18212121111}'
OK
127.0.0.1:6379> set blog:product:1 '{"id":1, "name":"huwei", "color": "red"}'
OK
127.0.0.1:6379> set blog:product:2 '{"id":2, "name":"xiaomi", "color": "black"}'
OK
添加完之后,打开之前安装的Redis客户端工具,然后查看我们刚添加的数据,树状的文件夹列表。
还有很多的命令这里不再一一讲述,具体可以看官网发布的命令去学习:redis.io/commands
1、哈希(Hash)
Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。如用户信息等。
Redis hash 是一个键值对集合,类似于Java中的HashMap结构。
Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。
String结构是将对象序列化为JSON字符串后存储,当需要修改对象某个字段时很不方便
| key | value |
|---|---|
| blog:user:1 | {"id":1, "name": "xiaoming", "phone": 123456789} |
| blog:user:2 | {"id":2, "name":"xiaohong", "phone": 18212121111} |
Hash结构可以将对象中的每个字段独立存储,可以针对单个字段做CRUD: