redis 与关系型数据库的对比

本文涉及的产品
云数据库 PolarDB MySQL 版,列存表分析加速 8核16GB
PolarDB Agent Flow,2核4GB
PolarSearch,搜索节点 4核8GB
简介:
复制代码
书和书签系统
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 来存储,

book就是表,5是id,title是字段

6377:0>set book:5:title 'PHP圣经'
6377:0>get 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标签的书
Suion tag:PHP tag:WEB

查:含有ruby,不含WEB标签的书
Sdiff tag:ruby tag:WEB #求差集
复制代码
Redis key 设计技巧
//先根据a分组,再根据b分组,再根据c分组,再根据d分组,d组只有一个值是1

1
2
3
4
5
6
7
8
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    lisi@163.com
1
2
3
4
5
6
7
8
//先根据user分组,再根据userid分组,再根据9分组,最后根据username分组,这个组只有一个值就是lisi
set   user:userid:9:username lisi
set   user:userid:9:password 111111
set   user:userid:9:email   lisi@163.com
 
set   user:userid:10:username yyy
set   user:userid:10:password 222222
set   user:userid:10:email   yyy@163.com

1
2
3
4
6380:0>get  user :userid:9:username
"lisi"
6380:0>get  user :userid:9: password
"111111"

  

1
2
3
4
5
6
7
6380:0>keys  user :userid:9*    //9号用户有多少字段
1)  "user:userid:9:email"
2)  "user:userid:9:password"
3)  "user:userid:9:username"
 
//查询用户名叫lisi的,redis毕竟不是传统数据库,查起来比较复杂
keys  user :userid:*:username lisi
1
2
3
4
5
2 注意:
在关系型数据中,除主键外,还有可能根据其他列来查询,例如根据用户名来查询,没有什么好的方法,只能根据冗余信息来维护。
Set   user :username:lisi:userid  9    //再维护一个用户名对应的userid的信息
6380:0>Get  user :username:lisi:userid  
"9"          //根据username查询到userid,然后根据userid找到哪一行

1
2
3
如果还要根据email来查询,那么就要又维护一个冗余的email,查询的时候先根据email找到userid,然后根据userid找到那一行。
Set   user :email:yyy@163.com:userid  10
Set   user :email:lisi@163.com:userid  9

1
这就跟索引一样,如果经常要根据哪个列查询,就要维护一个索引表,这里就是要维护一个指向主键的kv表。以空间换时间。


本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/8287118.html,如需转载请自行联系原作者
相关文章
|
10月前
|
存储 NoSQL Redis
阿里云高性能数据库Tair(兼容 Redis)收费价格,稳定可靠成本低
阿里云高性能云数据库Tair兼容Redis,提供Redis开源版和Tair企业版,支持多种存储介质与灵活扩展,适用于高并发场景。Tair具备亚毫秒级稳定延迟,保障业务连续性。价格方面,Redis开源版年费从72元起,Tair企业版年费从1224元起,具体费用根据配置不同有所变化。
|
存储 NoSQL 数据库
Redis 逻辑数据库与集群模式详解
Redis 是高性能内存键值数据库,广泛用于缓存与实时数据处理。本文深入解析 Redis 逻辑数据库与集群模式:逻辑数据库提供16个独立存储空间,适合小规模隔离;集群模式通过分布式架构支持高并发和大数据量,但仅支持 database 0。文章对比两者特性,讲解配置与实践注意事项,并探讨持久化及性能优化策略,助你根据需求选择最佳方案。
1161 5
|
canal 缓存 NoSQL
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
根据对一致性的要求程度,提出多种解决方案:同步删除、同步删除+可靠消息、延时双删、异步监听+可靠消息、多重保障方案
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
|
缓存 NoSQL Redis
Redis原理—2.单机数据库的实现
本文概述了Redis数据库的核心结构和操作机制。
Redis原理—2.单机数据库的实现
|
NoSQL Java Redis
Redis Pipeline介绍 ---- 提高操作Redis数据库的执行效率。
Redis Pipeline是提高Redis执行效率的重要技术,通过批量发送命令,显著减少了网络往返次数,提高了系统的吞吐量和性能。在实际应用中,合理使用Pipeline可以有效优化Redis的性能,特别是在需要批量操作的场景下。本文通过Python和Java的示例代码展示了如何实现和使用Redis Pipeline,为开发者提供了具体的操作指南。
685 16
|
消息中间件 缓存 NoSQL
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
|
存储 缓存 NoSQL
云端问道21期方案教学-应对高并发,利用云数据库 Tair(兼容 Redis®*)缓存实现极速响应
云端问道21期方案教学-应对高并发,利用云数据库 Tair(兼容 Redis®*)缓存实现极速响应
481 1
|
Oracle NoSQL 关系型数据库
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
3383 3
|
存储 缓存 NoSQL
Redis内存管理揭秘:掌握淘汰策略,让你的数据库在高并发下也能游刃有余,守护业务稳定运行!
【8月更文挑战第22天】Redis的内存淘汰策略管理内存使用,防止溢出。主要包括:noeviction(拒绝新写入)、LRU/LFU(淘汰最少使用/最不常用数据)、RANDOM(随机淘汰)及TTL(淘汰接近过期数据)。策略选择需依据应用场景、数据特性和性能需求。可通过Redis命令行工具或配置文件进行设置。
420 2
|
网络协议 NoSQL 网络安全
【Azure 应用服务】由Web App“无法连接数据库”而逐步分析到解析内网地址的办法(SQL和Redis开启private endpoint,只能通过内网访问,无法从公网访问的情况下)
【Azure 应用服务】由Web App“无法连接数据库”而逐步分析到解析内网地址的办法(SQL和Redis开启private endpoint,只能通过内网访问,无法从公网访问的情况下)
455 0