redis命名空间
这是一个很奇怪的概念,对于像我这种redis用的少的人(一般就存储了jwt)来说可能不知道是什么
我是在学习springdata时发现的这个问题:
mongoDB在SpringData中对应的实体类是这样子:
比较好理解:@Document(collection = "products")
对应mongodb的Collection(mysql的表),@Id
对应mongodb的主键(mysql的主键),其他字段对应mongodb的字段(mysql的列)
@Document(collection = "products")
public class Product {
@Id
private String id;
private String name;
private double price;
}
而redis的实体类长这样:
@RedisHash("cachedItems")
public class CachedItem {
@Id
private String key;
private String value;
}
对应关系也都差不多,但是多了一个@RedisHash("cachedItems")
的东西,在mongoDB和mysql对应分别对应Collection和表的东西,到了redis这里好像没有可以对应的东西,仔细想想,好像redis确实没有表的概念,比mongoDB和mysql少了一层结构
其实redis有一个叫做“命名空间”或者说是数据集的标识
的东西,这个东西在实际的redis结构中并不存在,但是我们在实际使用redis中往往会通过key的格式来实现它
具体如下:
在实际情况中,为了更好的使用redis,我们一般通过key来实现一个叫做“命名空间”或者说是数据集的标识
的结构,这个结构可以类比为mysql中的表
结构。
实现方式:将key使用:
进行分割,前半部分就是这条数据的命名空间
例如(注意这些都是string类型,并不是key-value,:
也是string的一部分):
user:123
order:ABC-2022
product_info:shoes-size-10
而上边的实体类:
@RedisHash("cachedItems")
public class CachedItem {
@Id
private String key;
private String value;
}
在使用是会把@RedisHash(“cachedItems”)和@Id组装起来作为实际的key
即这个实体类对应的数据的key就是:cachedItems:{key}
最后,我们一般这样设计key
表名:列名:主键名:主键值