加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

架构秘笈:移花接木。使用MySQL模拟Redis

发布时间:2019-10-23 12:49:27 所属栏目:编程 来源:佚名
导读:【大咖·来了 第7期】10月24日晚8点寓目《智能导购对话呆板人实践》 这年初,你看到的对象未必就是你以为的对象。一个mysql协议的后头,也许是tidb;一个linux呆板后头,也许是一个精简的docker;你认为xjjdog是个女的,但也许ta本身也不太清晰;而当你大喊
副问题[/!--empirenews.page--] 【大咖·来了 第7期】10月24日晚8点寓目《智能导购对话呆板人实践》

这年初,你看到的对象未必就是你以为的对象。一个mysql协议的后头,也许是tidb;一个linux呆板后头,也许是一个精简的docker;你认为xjjdog是个女的,但也许ta本身也不太清晰;而当你大喊php万岁的时辰,也许是研发职员和你开个打趣,重写了后缀,尔后端用的却是java。

各人都知道redis速率快,但它的容量和内存容量有关,很轻易到达瓶颈。有些互联网公司,直接行使redis作为后端数据库(在下服气)。当营业量暴增,就面对一个redis容量和价值的衡量题目。改营业代码是来不及了,只好用一些耐久化存储 ,来模仿redis的一些数据布局。

redis支持近十种数据范例,最常用的有5种。string、hash、zset、set、list等。本文将针对几种常见的数据布局,切磋一下常用操纵的模仿实现。

架构秘籍:移花接木。行使MySQL模仿Redis

着实,我们所必要开拓的,就是一个redis署理proxy。redis的客户端,毗连上我们的署理之后,会举办协议理会。理会出来的呼吁,将会被模仿,然后按照设置的路由,定位到响应的mysql中。

也就是你所行使的redis,着实行使mysql来存储数据的。没有rdb,也没有aof。

Redis是文本协议

redis是文本协议,协议名称叫做RESP。RESP 是 Redis 序列化协议的简写。它是一种直观的文本协议,上风在于实现非常简朴,理会机能极好。

如图,Redis 协议将传输的布局数据,可以总结为 5 种最小单位范例。每个单位竣事时,同一加上回车换行标记 。

下面是几个法则:

  1. 单行字符串 以 + 开头;  
  2. 多行字符串 以 $ 开头,后跟字符串长度;  
  3. 整数值 以 : 开头,后跟整数的字符串情势;  
  4. 错误动静 以 - 标记开头;  
  5. 数组 以 * 号开头,后跟数组的长度; 

好比,下面这个就是数组[9,9,6]的报文。

  1. *3  
  2. :9  
  3. :9  
  4. :6 

以是这个协议的理会和拼装,长短常简朴的。拿netty来说,就有codec-redis 模块供我们行使。

架构秘籍:移花接木。行使MySQL模仿Redis

实现:数据布局计划

在数据表的计划上,我们发明,kv和hash在服从上没有什么不同,由于它可以或许直接按照key定位到。

反倒是zset,因为有排序的成果,造成了许多操纵的执行服从都不尽人意。

其它,因为我们差异的数据布局,是行使差异的表举办存储的。以是删除操纵,要在每张表上都执行一遍。

kv计划

kv,即string,是redis里最根基的数据范例。一个key对应一个value,string范例的值最大能存储512MB。

计划专用的数据库表rstore_kv,个中,rkey是主键。

  1. rkey        varchar  
  2. val     varchar  
  3. lastTime    bigint 

set操纵

  1. insert into rstore_kv("rkey","val","lastTime") values($1,$2,$3)  
  2. on duplicate key update set "val"=$2,"lastTime"=$3 

get操纵

  1. select val from rstore_kv where "rkey" = $1 

del操纵

  1. delete from rstore_kv where "rkey" = $1 

exists操纵

  1. select count(*) as n from rstore_kv where  "rkey" = $1 

ttl操纵

  1. select lastTIme from rstore_kv  where  "rkey" = $1 

hash计划

hash 是一个键值(key=>value)对荟萃。hash 出格适实用于存储工具。

计划专用的数据库表rstore_hash,个中,rkey和hkey是连系主键。

  1. rkey        varchar  
  2. hkey        varchar  
  3. val     varchar  
  4. lastTime    bigint 

hset操纵

  1. insert into rstore_hash("rkey","hkey","val","lastTime") values($1,$2,$3,$4)  
  2. on duplicate key update set "val"=$3,"lastTime"=$4 

hget操纵

  1. select val from rstore_hash where "rkey" = $1 and "hkey" = $2 

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读