redis结构设计及针对msyql相关查询实现考虑
来源:互联网 发布:软件项目 编辑:程序博客网 时间:2024/05/02 04:20
针对项目需求,以下主要针对对象及相关操作进行分析。
Ø 对象存储:
redis对象存储有三种方案,考虑到操作的便利及存储效率,项目采用序列化存储和hash存储。
进行hash存储时,首先需对对象进行拆分为field-value形式,利用对象属性作为fileld,value作为对象属性值。查询时首先获得field-value键值对,再进行对象组装。参见redisService接口hmset、hgetAll方法
序列化存储较为便利,只需对对象进行序列化,获取时进行反序列化即可,但无法操作对象属性。参见redisService接口set/getObject方法。
对象存储key值的定义,一般情况下采用id作为唯一识别,如Talk:2577,若该对象经常根据其中一属性进行操作,可采取以下方法:
l 进行额外数据定义,建立id与此属性的映射
l 结合mysql,通过mysql获取id列表,之后根据id查询缓存
key-value存储不能提供如sql那样复杂的查询,Redis基本只能提供简单的查询,上述操作远不能满足系统对于数据的操作,对于mysql的联合查询等复杂操作,需要在redis中维护另外的数据映射,这些都需要在进行操作前事先考虑并设计好。如获取用户最近评论,则对talk相关属性建立另外映射。
Ø 对象更新:
针对对象的不同存储类型具有不同的更新方法:
Hash存储:利用key、field(对象属性)进行修改。若未提供对象id,则需先获取id,进而进行修改
序列化存储:根据id获取对象,修改完再进行存储。
Ø 查询
存储对象时一般采用对象类型及id作为key值,查询时需通过id才能获取数据。以下针对数据相关查询进行说明(对象存储采用Talk:1形式):
l FindById:根据id查询
解决方案:可直接查询
l findAll:查询所有对象
解决方案:利用key值为Talk:*查询即可
l FindbyProperty根据单个属性查询
解决方案:方法一,id与属性映射,进而获取对象。方法二,结合mysql
l findByExample根据多个属性查询
解决方案:方法一:每个属性做映射,进而求结果交集。方法二,结合mysql获取id,进而获取对象
l Criteria或DetachedCriteria查询以及联合查询等复杂查询
解决方案:方法一,事先设计好相关数据映射存储。方法二,结合mysql
- redis结构设计及针对msyql相关查询实现考虑
- 社交圈数据结构设计(redis实现)
- redis针对不同场景进行相关的策略的记录,临时未代码实现
- msyql 并发相关参数
- msyql数据库 子查询
- Redis 存储结构设计
- Redis键值结构设计
- redis数据库结构设计
- Redis 存储结构设计
- Redis 存储结构设计
- msyql慢查询日志配置
- 媒体网关的开放式结构设计考虑
- Redis源码剖析和注释(十四)---- Redis 数据库及相关命令实现(db)
- SNS好友的redis结构设计
- 好友分组的redis结构设计
- Redis数据库底层数据结构设计
- msyql
- ASP无限级分类原理、数据库结构设计、应用及相关函数
- 一月有几天
- VBS判断excel版本
- 太陽花的伤感空间日志分享:最后哭的人,还是自己
- C#输入一组整数,输出所有的奇数
- Android缩略图类源代码 Android缩略图类源代码
- redis结构设计及针对msyql相关查询实现考虑
- PHP数组和Json之间的转换
- 比较2个实数的大小~!
- 一位菜鸟编写的第一个程序
- 微博伤感语录分享:总有那么一个人,是你的念想
- 请求转发:MVC设计模式、细节、请求域属性的编程实例、请求重定向和请求转发的区别
- nginx模块分析
- 【最大子矩形】面积
- 据说史上最牛的vim配置文件