开发者社区> 问答> 正文

如何用redis存储mysql数据和关联关系?,数据库报错

"

最近在开发一个通过配置组合功能的项目,这些配置数据可以遇见会被频繁访问,所以想在mysql上面加一层redis把这些数量不是非常大的配置做缓存,并在增删改的时候把数据从mysql更新后再从redis中更新,但是表和表之间有关联关系。

问:

这些关系应该怎么保存?如何方便的通过条件从redis中查询到多个表的数据?

" ![image.png](https://ucc.alicdn.com/pic/developer-ecology/c737452999ba4c90beec1e947e925c9c.png)

展开
收起
python小菜菜 2020-06-01 19:28:42 795 0
1 条回答
写回答
取消 提交回答
  • "

    超级简单。

    Nosql数据库设计师,50%的工作就是给主键起个名,这话一点都不错,彻底从烦人的设计字段名称中解脱出来。

    1、统一表名。关系型数据库中的表名经常会用到下划线分割,用作hash键的时候显得不够简洁,比如一张表叫tm_user,转换成hash键的时候就叫user就可以了。

    2、统一主键。要求所有表中的自增主键完全一致,“完全”包括名称和数据类型,比如user这张表,主键就叫id,而不能是user_id。

    3、设计主键。还是以上面的user举例,user一般称为hash键,而这张的id称为范围键(range key),主键按照"hash:range"的形势构造,key="user:1"表示存放的是mysql中user这张表的id为1的用户行数据。假设你的Nosql需要对应mysql多库,将库名也放进hashkey中,比如"crm:user:1"这样

    4、设计value格式。这里推荐用json格式。Nosql中数据类型和关系型数据库不一样,没有那么多复杂的类型。key永远是string类型,而value的类型分两种:

    基础类型:string和number类型;

    保留字:true、false、null

    具体可以参考json的数据规范ecma-404文档。

    5、举例,假设你的user表只要两个字段,id和name,最后格式就是这样:

    "user:1"="{"id":1,"name":"红薯"}"

    ######如何存储数据,我有一篇博文,可以看看,如何维护关系,可以深入了解redis的几种存储类型的典型应用, http://my.oschina.net/yuyidi/blog/499951
    ######回复 @yalishizhude : redis等非关系型存储系统从来不是为了解决关系型数据库的痛点,而是能有一种更简易的方式或更灵活的方式且高效的进行存储热点数据。我写的那遍文章的时候我才是刚了解redis,对redis的理解也比较局限,当初想法很单纯,想用redis去替代mysql等关系型数据库。上面我也只是介绍了如何进行存储mysql中表的关系数据而已且做了对比怎样才能做到更灵活。######并不能解决表关联的问题,对条件支持也很不友好,需要全量查询之后再反序列化比对。######同问" ![image.png](https://ucc.alicdn.com/pic/developer-ecology/aa60b94463414b3bac9d1a410cb62239.png)
    2020-06-01 19:28:50
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
DTCC 2022大会集锦《云原生一站式数据库技术与实践》 立即下载
阿里云瑶池数据库精要2022版 立即下载
2022 DTCC-阿里云一站式数据库上云最佳实践 立即下载

相关镜像