【Redis】Redis命令-Key的层级结构

一、介绍

redis是键值型的数据库,因此它的键要求唯一,因此大多数情况下我们都会以数据的id来作为key,形成唯一标识。

但是这里就会存在一个问题了:Redis没有类似MySQL中的Table的概念,没有表,所有数据都是存在一起的,那么我们该如何区分不同类型的key呢?

例如,需要存储用户、商品信息到redis,有一个用户id是1,有一个商品id恰好也是1,此时如果使用id作为key,那就会冲突了,该怎么办?

此时我们可以通过给key添加前缀加以区分,不过这个前缀不是随便加的,有一定的规范:

Redis的key允许有多个单词形成层级结构,多个单词之间用 ':'(冒号) 隔开,例如我们可以这样,这个格式并非固定,但是推荐大家这样写,除非你们公司有固定key的格式。

1652941631682

例如我们的项目名称叫 heima,有 userproduct 两种不同类型的数据,我们可以这样定义key:

  • user相关的key:heima:user:1(代表id为1的用户信息)

  • product相关的key:heima:product:1

这样key就形成了一种层级关系,它们俩是一个项目的,只不过一个是 user,一个是 product

现在key定义好了,那值是什么呢?我们知道用户也好,商品也好,在我们的项目中往往都是一个java类或者java对象,这样的对象该如何存储到值的位置呢?

上节将string类型的时候其实提到过,string是字符串,Java对象虽然不是字符串,但是它完全可以序列化成JSON的风格来存储。

例如一个User / Product对象,则可以将对象序列化为JSON字符串后存储:

KEYVALUE
heima:user:1{“id”:1, “name”: “Jack”, “age”: 21}
heima:product:1{“id”:1, “name”: “小米11”, “price”: 4999}

二、代码实现

存入两个user,两个product。

PS:存入的时候JSON是一个字符串,需要加 ''

127.0.0.1:6379> set heima:user:1 '{"id":1, "name":"Jack", "age": 21}'
OK
127.0.0.1:6379> set heima:user:2 '{"id":2, "name":"Rose", "age": 18}'
OK
127.0.0.1:6379> set heima:product:1 '{"id":1, "name":"小米11", "price": 4999}'
OK
127.0.0.1:6379> set heima:product:2 '{"id":2, "name":"荣耀6", "price": 2999}'
OK

然后通过 keys * 来查看我们刚刚存入的数据,但是从这里并不能看见有什么特殊之处

image-20240523082531777

但是在可视化界面中,redis会以层级结构来进行存储,形成类似于这样的结构,更加方便Redis获取数据

image-20240523082614796

这样就避免了id相同时的冲突,并且让我们的数据分离,看起来比较优雅。

不仅仅是string类型可以将key按照这种方式设定,以后我们学的其他的数据类型,它的key都可以用这种方式去做成层级的模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值