一、Redis概述:
redis:是一个可持久化的单进程单线程key-value类型高速内存缓存系统,和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(列表)、set(集合)、zset(sorted set --有序集合)和hashs(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB,并且在此基础上实现了master-slave(主从)同步,当前 Redis的应用已经非常广泛,国内像新浪、淘宝,国外像 Flickr、Github等均在使用Redis的缓存服务。官网地址:https://redis.io/ ,目前由redis项目的开发和维护由vmware厂商负责提供支持
优点:
1、性能极高 Redis能支持超过 100K+ 每秒的读写频率
2、丰富的数据类型 Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作
3、原子性 Redis的所有操作都是原子性(即所有操作要么成功要么失败不执行),同时Redis还支持对几个操作全并后的原子性执行
4、Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问
二、应用场景分析:
MySql+Memcached架构的问题:实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的不断增加,和访问量的持续增长,就会遇到很多问题:
1、MySQL需要不断进行拆库拆表,Memcached也需不断跟着扩容,扩容和维护工作占据大量开发时间
2、Memcached与MySQL数据库数据一致性问题
3、Memcached数据命中率低或down机,大量访问直接穿透到DB,MySQL无法支撑
4、跨机房cache同步问题
Redis的应用场景:
Redis更像一个加强版的Memcached,那么何时使用Memcached,何时使用Redis呢?
1、Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储
2、Redis支持数据的备份,即master-slave模式的数据备份
3、Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用
4、Memcached:动态系统中减轻数据库负载,提升性能;做缓存,适合多读少写,大数据量的情况(如人人网大量查询用户信息、好友信息、文章信息等)
Redis:适用于对读写效率要求都很高,数据处理业务复杂和对安全性要求较高的系统(如新浪微博的计数和微博发布部分系统,对数据安全性、读写要求都很高)
三、Redis的数据回收策略:
Redis回收策略 | |
volatile-lru | 从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰 |
volatile-ttl | 从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰 |
volatile-random | 从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰 |
allkeys-lru | 从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰 |
allkeys-random | 从数据集(server.db[i].dict)中任意选择数据淘汰 |
no-enviction(驱逐) | 禁止驱逐数据 |
四、部署Redis高性能数据库
IP地址 | 主机名 | 系统 | 软件 |
192.168.2.7 | C7--07 | CentOS 7.4 | redis-6.2.6.tar.gz |
下载地址:Redis下载
1.安装Redis
这里使用的是redis-6.2.6版本
[root@C7--07 ~]# tar zxvf redis-6.2.6.tar.gz
[root@C7--07 ~]# cd redis-6.2.6
[root@C7--07 redis-6.2.6]# make
[root@C7--07 redis-6.2.6]# echo $?
[root@C7--07 redis-6.2.6]# cd