随着互联网的飞速发展和大数据云计算概念的普及 ,传统的关系型数据库已经不能满足中大型网站日益增长的访问量和数据量, 这个时候需要一种能够快速存取数据的组件来缓解传统数据库服务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在系统架构中的位置,它是挡在关系型数据库前面的一道快速读取数据的屏障,极大的缓解了关系型数据的读取压力,使整个系统的在数据存取的瓶颈得到了极大的改善。
![](https://i-blog.csdnimg.cn/blog_migrate/1192bca0cb4359a46361b7538807fa82.jpeg)
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 的操作。
![](https://i-blog.csdnimg.cn/blog_migrate/4066b6ed353ebf0b4fd4dac9399ce759.png)
![](https://i-blog.csdnimg.cn/blog_migrate/88c7f2221ffdc61e122e9de05fc0b58c.png)
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中,不需要每次都访问关系型数据库。
![](https://i-blog.csdnimg.cn/blog_migrate/676aa72a9f9ca3c37839d37804c82419.png)
![](https://i-blog.csdnimg.cn/blog_migrate/88c7f2221ffdc61e122e9de05fc0b58c.png)
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 适用分页
应用场景: 如下图所示: 商品的评论表,最新的评论显示在最前面,而且可以分页显示
![](https://i-blog.csdnimg.cn/blog_migrate/28317c334a3e19109fd3643669b8520f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/88c7f2221ffdc61e122e9de05fc0b58c.png)
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的查看权限(共同好友)。
![](https://i-blog.csdnimg.cn/blog_migrate/79da4b400dc06f002cd5305b2a082139.png)
* Zset (sorted set) 有序集合。
K-V格式中 V是一个有序set类型 怎么做到有序呢,其实就是给它增加一个分数。
基本的操作语法如下:
![](https://i-blog.csdnimg.cn/blog_migrate/67057747527355785f5ebff0cd0d7ea6.png)
以上给大家介绍的一些内容仅仅是Redis的一些基础入门知识,同样Redis虽然是内存数据,但是也可以同其他数据库一样进行数据的持久化,以及进行主从分配和集群,在这里就不再详细描述 。