17 redis -key设计原则

书签系统
create table book (
bookid int,
title char(20)
)engine myisam charset utf8;

insert into book values
(5 , ‘PHP圣经‘),
(6 , ‘ruby实战‘),
(7 , ‘mysql运维‘),
(8, ‘ruby服务端编程‘);

create table tags (
tid int,
bookid int,
content char(20)
)engine myisam charset utf8;

insert into tags values
(10 , 5 , ‘PHP‘),
(11 , 5 , ‘WEB‘),
(12 , 6 , ‘WEB‘),
(13 , 6 , ‘ruby‘),
(14 , 7 , ‘database‘),
(15 , 8 , ‘ruby‘),
(16 , 8 , ‘server‘);

# 既有web标签,又有PHP,同时还标签的书,要用连接查询

select * from tags inner join tags as t on tags.bookid=t.bookid
where tags.content=‘PHP‘ and t.content=‘WEB‘;

换成key-value存储
用kv 来存储
set book:5:title ‘PHP圣经‘
set book:6:title ‘ruby实战‘
set book:7:title ‘mysql运难‘
set book:8:title ‘ruby server’

sadd tag:PHP 5
sadd tag:WEB 5 6
sadd tag:database 7
sadd tag:ruby 6 8
sadd tag:SERVER 8

查: 既有PHP,又有WEB的书
Sinter tag:PHP tag:WEB  #查集合的交集

查: 有PHP或有WEB标签的书
Sunin tag:PHP tag:WEB

查:含有ruby,不含WEB标签的书
Sdiff tag:ruby tag:WEB #求差集

Redis key 设计技巧

1: 把表名转换为key前缀 如, tag:
2: 第2段放置用于区分区key的字段--对应mysql中的主键的列名,如userid
3: 第3段放置主键值,如2,3,4...., a , b ,c
4: 第4段,写要存储的列名

用户表 user  , 转换为key-value存储--------------------------------------------------
  userid    username    passworde      email--------------------------------------------------
   9         Lisi       1111111     [email protected]com--------------------------------------------------

set  user:userid:9:username lisi
set  user:userid:9:password 111111
set  user:userid:9:email   [email protected]com

keys user:userid:9*

2 注意:
在关系型数据中,除主键外,还有可能其他列也步骤查询,
如上表中, username 也是极频繁查询的,往往这种列也是加了索引的.

转换到k-v数据中,则也要相应的生成一条按照该列为主的key-value
Set  user:username:lisi:uid  9  

这样,我们可以根据username:lisi:uid ,查出userid=9,
再查user:9:password/email ...
时间: 2024-10-11 03:53:50

17 redis -key设计原则的相关文章

Redis key 设计技巧

1: 把表名转换为key前缀 如, tag: 2: 第2段放置用于区分区key的字段--对应mysql中的主键的列名,如userid 3: 第3段放置主键值,如2,3,4...., a , b ,c 4: 第4段,写要存储的列名 用户表 user  , 转换为key-value存储 userid username passworde email 9 Lisi 1111111 [email protected] set  user:userid:9:username lisi set  user:

redis key设计技巧

1: 把表名转换为key前缀 如, user: 2: 第2段放置用于区分区key的字段--对应mysql中的主键的列名,如userid 3: 第3段放置主键值,如2,3,4...., a , b ,c 4: 第4段,写要存储的列名 用户表 user  , 转换为key-value存储 userid username passworde email 9 Lisi 1111111 [email protected] set user:userid:9:username lisi set user:u

SOA 的基本概念及设计原则浅议

SOA是英文词语"Service Oriented Architecture"的缩写,中文有多种翻译,如"面向服务的体系结构"."以服务为中心的体系结构"和"面向服务的架构",其中"面向服务的架构"比较常见.SOA有很多定义,但基本上可以分为两类:一类认为SOA主要是一种架构风格;另一类认为SOA是包含运行环境.编程模型.架构风格和相关方法论等在内的一整套新的分布式软件系统构造方法和环境,涵盖服务的整个生命

规范化-数据库设计原则

关系数据库设计的核心问题是关系模型的设计.本文将结合具体的实例,介绍数据库设计规范化的流程. 摘要 关系型数据库是当前广泛应用的数据库类型,关系数据库设计是对数据进行组织化和结构化的过程,核心问题是关系模型的设计.对于数据库规模较小的情况,我们可以比较轻松的处理数据库中的表结构.然而,随着项目规模的不断增长,相应的数据库也变得更加复杂,关系模型表结构更为庞杂,这时我们往往会发现我们写出来的SQL语句的是很笨拙并且效率低下的.更糟糕的是,由于表结构定义的不合理,会导致在更新数据时造成数据的不完整.

RESTful API的设计原则

最近一直在做公司的一个API平台的项目,前后大约有半年多了,中间穿插了好多其他的项目一起做的.上周经理要求写文档,我就重新打开项目开始检阅之前的代码,发现好多地方当初设计的并不合理,忽然就想到,一个好的API平台,应该怎么来设计呢?有哪些规范要遵守呢?面对自己的项目,感觉好多地方都要改,但是已经有人在用了,怎么办?全都要改动吗?所以就上网找解决方案,然后就发现一精品贴,现转载过来,以备不时查阅. 原文地址:http://www.cnblogs.com/moonz-wu/p/4211626.htm

APP开发设计应以人为本!浅谈APP交互设计原则

为什么APP开发设计需要原则?设计原则其实就是对一些设计过程中基于人类的认知规律对设计做出的一些指导性原则,并且对已经成为行业共识的设计经验做个总结,用来指导设计师界定问题.提高效率. 先就APP开发设计 http://www.czwew.com 常州紫竹云科技产品经理分享交互设计的时候最为大家所认可的几条设计原则:可学习性.一致性.简洁性.流畅性.及时反馈.除了这么六个?还有其他的吗?你放心,如果需要还有更多. 一.经常用的设计原则有哪些? 1.可学习性   目标用户在已有的知识和经验基础上,

用户界面设计原则(下)

9.界面外观遵循用户行为 人总是对符合期望的行为最感舒适.当某人或某件事的行为始终按照我们所期望的那样去进行时,我们会感觉到和他们之间的关系不错.因此,设计出来的元素,看起来,应该像它们本身特征一样.在具体操作中,这意味着,用户只要看到这个界面元素,就应该能猜测出这个元素是做什么的.如果看起来是个按钮,它就应该有按钮的功能,不要在基本的交互问题上耍小聪明……把你的创造力留到更高层次的需求上吧. 10.前后一致的重要性 遵循上一规则,画面中,视觉元素的外观不应该是一样的,除非他们的功能相近.如果是

设计模式之_6大设计原则(转)

一.单一职责原则(Single Responsibility Principle) 定义:不要存在多于一个导致类变更的原因.通俗的说,即一个类只负责一项职责. 问题由来:类T负责两个不同的职责:职责P1,职责P2.当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障. 解决方案:遵循单一职责原则.分别建立两个类T1.T2,使T1完成职责P1功能,T2完成职责P2功能.这样,当修改类T1时,不会使职责P2发生故障风险:同理,当修改T2时,也不会使职责P1发生故

redis数据库设计(转)

原文:http://segmentfault.com/q/1010000000316112 redis是什么 redis就是一个存储key-value键值对的仓库,如何使用redis在于如何理解你需要设计的系统的E-R的模型,然后合理的规划redis的数据库结构 场景 我举一个简单的消息系统的例子,业务需求:服务器端发送消息给用户E-R模型:1. 用户(uid,nickname,phone,mood)2. 消息(mid,title,content,ts) 用户和消息之间是n:n的关系,一个消息可