浅谈大型分布式系统Redis内存数据库实践

2017 年 8 月 14 日 ImportNew keven

随着互联网的飞速发展和大数据云计算概念的普及 ,传统的关系型数据库已经不能满足中大型网站日益增长的访问量和数据量, 这个时候需要一种能够快速存取数据的组件来缓解传统数据库服务I/O的压力,解决系统性能上的瓶颈.

本篇文章的主要目的是为了让大家初步了解Redis内存数据是什么,在大型分布式系统架构中有什么作用,以及Redis内存数据库在实际项目中怎么应用。


分布式有什么用


1) 将系统功能模块化,且部署在不同的地方,对于底层模块,只要保持接口不变,

上层系统调用底层模块将不关心其具体实现,且底层模块做内部逻辑变更,上层系统

都不需要再做发布,可以极大限度的解耦合

2) 解耦合之后,可以复用共同的功能,且业务扩展更为方便,加快开发和发布的速度

3) 系统分开部署,充分利用硬件,可以提高系统性能

4) 减少数据库连接资源的消耗


Redis是什么 


Redis是一个开源的 ,高性能 ,C语言开发的,键值对(key-value)存储数据的NOSQL数据库。那接下来我们理清楚几个基本的概念和数据库应用的一个发展历史:

基本概念:NOSQl : Not Only Sql  泛指非关系数据库  Redis /MongoDB /Hbase

关系型数据库: Oracle/Mysql/Sybase /SqlServer


1

Redis 有什么用


1.1. Redis的作用和地位


Redis的主要作用一句话来概括就是 能够快速存取。


如下图所示:以电商平台架构为例,Redis在系统架构中的位置,它是挡在关系型数据库前面的一道快速读取数据的屏障,极大的缓解了关系型数据的读取压力,使整个系统的在数据存取的瓶颈得到了极大的改善。



1.2. Redis的应用场景


Redis在大型分布式系统架构中主要的一些应用场景包括 单点登陆系统的权限验证,直播平台的好友列表显示,商品秒杀活动的剩余商品数目,电商网站的商品排行,网站的访问数量统计等高并发访问的功能需求,接下来我们在介绍Redis支持的数据类型里面会一一介绍此些场景的操作。


2

Redis怎么用


Redis的官网地址:  https://redis.io/

Redis最新版本:3.2.9

Redis数据库服务启动: 在linux下面启动Redis数据库服务:./redis-server  /etc/redis.conf

Redis客户端:启动客户端链接数据库   ./redis-cli -h 127.0.0.1 -p 6379


2.1. Redis的五大数据类型以及应用场景


Redis一共有五种数据类型来支持各种应用场景,String /Hash/List/Set/Zset

接下来我们一一介绍。


2.1.1. String类型 

K-V格式中 V是一个字符串(数字)

基本的操作语法如下:

单个设值取值 : set k1 v1   get k1

多个设置取值  mset k1 v1 k2 v2  mget  k1 k2

删除key  del k1

注意: 当value是数字时,可以递增,可以进行递增递减操作 比如INCR K1, DECR K1 

实际应用场景: 如下图所示 秒杀商品数目或者点 zan 的操作。


2.1.2. Hash 数据类型

K-V格式中 V是一个Hash类型 ,类似于Java里面Map<Object,Object>

基本的操作语法如下:

设置对象的某个属性 hset student:001 id 1

设置对象的多个属性hmset student:001 id 1 name xiaoxi  sex boy height 180

获取对象的单个属性 hget student:001 id /hget strudent name

获取对象的多个属性 hmget student:001 id name

获取对象所有的属性 hgetall student

删除一个或多个字段 hdel  stduent   id  name

实际应用场景 : 如下图所示,电商网站中商品的详细信息可以存储在Redis中,不需要每次都访问关系型数据库。


2.1.3. list数据类型

K-V格式中 V是一个list类型 ,类似与java里面的LinkedList 有序列表

基本的操作语法如下:

从左边插入记录  lpush comment:1  1 2 3

从右边插入记录  rpush comment:1  4 5 6

把它看成一个竹子,从竹子两端插入数据 上面插入的记录排列如下。

3 2 1 4 5 6

删除就是弹出左边弹出,右边弹出 lpop commet:1 1/ rpop commet:1 1

获取list长度 llen comment:1

获取list lrange start end 适用分页

应用场景: 如下图所示: 商品的评论表,最新的评论显示在最前面,而且可以分页显示


2.1.4. set数据类型

K-V格式中 V是一个set类型,和list的不同的地方就是set是无序的而且里面的元素有唯一性

基本的操作语法如下:

增加元素 sadd keven_friends xiaoxi  xiaohei

  删除元素 srem keven_friends  xiaoxi

  查看元素 smember keven_friends

  查看元素个数 scard keven_friends

  是否存在某个元素 sisimember keven_friends xiaoxi

  集合运算 交集/并集 sinter key1 key2 / sunion key1 key2

应用场景: 如下图所示,set数据类型主要应用在 独立IP投票的限制/微信朋友quan的查看权限(共同好友)。


*  Zset (sorted set) 有序集合。


K-V格式中 V是一个有序set类型  怎么做到有序呢,其实就是给它增加一个分数。

基本的操作语法如下:


以上给大家介绍的一些内容仅仅是Redis的一些基础入门知识,同样Redis虽然是内存数据,但是也可以同其他数据库一样进行数据的持久化,以及进行主从分配和集群,在这里就不再详细描述 。


随着互联网的快速发展,和云服务概念的普及,使得我们在搭建系统的时候越来越倾向于分布式系统架构,那么分布式系统架构要涉及到哪些知识点,以及我们如何来实现分布式架构呢, 为了解决大家的这个疑惑,我受邀时光钥匙平台为大家进行一次分享。


这次分享,我将主讲搭建系统时所使用的分布式系统架构,分布式以下知识点:

Duboo分布式服务框架  

Lucene 全文检索技术  

并发编程之NIO流行框架之Netty 

Redis内存数据库 

高并发编程必备之NIO基础 

ActivMQ 分布式消息总线

及如何实现分布式架构。


分享主题:分布式系统架构的实现

分享时间:2017/8/15  20:30 —23:30

报名方式:加 QQ 群 658366541 报名

报名费用:完全免费

 

最后感谢「时光课堂」的邀请,大家也可扫如下二维码加群报名(群号 658366541)。


↓↓点击阅读原文也能报名

登录查看更多
1

相关内容

Redis 是一个使用 C 语言写成的,开源的 key-value 数据库。
【硬核书】可扩展机器学习:并行分布式方法
专知会员服务
85+阅读 · 2020年5月23日
专知会员服务
30+阅读 · 2020年5月20日
轻量级神经网络架构综述
专知会员服务
96+阅读 · 2020年4月29日
专知会员服务
123+阅读 · 2020年3月26日
【大规模数据系统,552页ppt】Large-scale Data Systems
专知会员服务
60+阅读 · 2019年12月21日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
95+阅读 · 2019年12月4日
在K8S上运行Kafka合适吗?会遇到哪些陷阱?
DBAplus社群
9+阅读 · 2019年9月4日
工行基于MySQL构建分布式架构的转型之路
炼数成金订阅号
15+阅读 · 2019年5月16日
浅谈 Kubernetes 在生产环境中的架构
DevOps时代
11+阅读 · 2019年5月8日
使用 Canal 实现数据异构
性能与架构
20+阅读 · 2019年3月4日
Neo4j 和图数据库起步
Linux中国
8+阅读 · 2017年12月20日
Knowledge Based Machine Reading Comprehension
Arxiv
4+阅读 · 2018年9月12日
Arxiv
14+阅读 · 2018年4月18日
Arxiv
3+阅读 · 2012年11月20日
VIP会员
相关VIP内容
【硬核书】可扩展机器学习:并行分布式方法
专知会员服务
85+阅读 · 2020年5月23日
专知会员服务
30+阅读 · 2020年5月20日
轻量级神经网络架构综述
专知会员服务
96+阅读 · 2020年4月29日
专知会员服务
123+阅读 · 2020年3月26日
【大规模数据系统,552页ppt】Large-scale Data Systems
专知会员服务
60+阅读 · 2019年12月21日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
95+阅读 · 2019年12月4日
相关资讯
在K8S上运行Kafka合适吗?会遇到哪些陷阱?
DBAplus社群
9+阅读 · 2019年9月4日
工行基于MySQL构建分布式架构的转型之路
炼数成金订阅号
15+阅读 · 2019年5月16日
浅谈 Kubernetes 在生产环境中的架构
DevOps时代
11+阅读 · 2019年5月8日
使用 Canal 实现数据异构
性能与架构
20+阅读 · 2019年3月4日
Neo4j 和图数据库起步
Linux中国
8+阅读 · 2017年12月20日
Top
微信扫码咨询专知VIP会员