内容要点:c++
1、Redis 简介:redis
2、安装部署 Redis:算法
3、Redis 配置文件:sql
4、Redis 数据库经常使用命令:数据库
5、Redis 持久化:vim
6、Redis 性能管理:windows
补充:缓存
1、关系数据库(SQL)和非关系数据库(NoSQL)简要分析:bash
2、Redis 和 Memcache 的比较服务器
1、Redis 简介:
Redis 基于内存运行并支持持久化;
采用 key-value (键值对) 的存储形式;
优势:
具备极高的数据读写速度;
支持丰富的数据类型;
支持数据的持久化;
原子性;
支持数据备份
2、安装部署 Redis:
(1)安装 redis:
安装包:redis-5.0.7.tar.gz
系统:Linux
操做步骤总览:
第一步:经过远程挂载的办法将 windows上的安装包下载到 Linux本地。
第二步:安装编译工具
yum install gcc gcc-c++ make -y
第三步:解压
tar zxvf redis-5.0.7.tar.gz -C /opt/
第四步:安装
cd redis-5.0.7/ make make PREFIX=/usr/local/redis install
第五步:建立软链接
ln -s /usr/local/redis/bin/* /usr/local/bin/
第五步:启动安装脚本,查看端口状态
cd /redis-5.0.7/utils/ ./install_server.sh //启动脚本,注意:这步一路回车到底就好了 netstat -natp | grep 6379
除此以外,还能够用 redis_6379 控制其开启关闭:
/etc/init.d/redis_6379 stop //关闭 /etc/init.d/redis_6379 start //开启 /etc/init.d/redis_6379 restart //重启
(2)redis-cli 远程链接:
一、先修改配置文件,添加主机的IP地址
vim /etc/redis/6379.conf bind 127.0.0.1 192.168.220.131 //添加主机的IP地址
二、重启服务
三、远程链接
redis-cli -h 192.168.220.131 -p 6379 //-h:指定主机IP地址,-p:指定端口
3、Redis 配置文件:
配置参数 vim /etc/redis/6379.conf bind:监听的主机地址 port:端口 daemonize yes:启用守护进程 pidfile:指定PID文件 loglevel notice:日志级别 logfile:指定日志文件
4、Redis 数据库经常使用命令:
(一)经常使用命令:
(1)redis-cli 命令行工具:
一、链接本地数据库:
/usr/local/redis/bin/redis-cli
二、链接远程数据库:
redis-cli -h 192.168.220.131 -p 6379
三、存放数据(set):
四、获取数据(get):
(2)key 相关命令:
一、keys :获取符合规则的键值列表
>keys * //查看当前数据库中全部的键 >keys v* //查看当前数据库中以v开头的键 >keys v? //查看当前数据库中以v开头后面包含任意一个字符的键 >keys v?? //查看当前数据库中以v开头后面包含任意二个字符的键
二、exists:判断键值是否存在
三、del :删除当前数据库的指定 key
四、type :获取 key 对应的 value 值类型
五、rename(覆盖)/ renamenx(不覆盖):对已有的 key 进行重命名:
六、dbsize :查看当前数据库中 key 的数目
(3)redis-benchmark 测试工具:
-h:指定服务器主机名 -p:指定服务器端口 -c:指定并发链接数 -n: 指定请求数 -d:以字节的形式指定SET/GET值的数据大小 -q:强制推出redis。仅显示query/sec值
redis-benchmark -h 192.168.220.131 -p 6379 -c 100 -n 100000 //向IP地址为192.168.220.13一、端口为6379的redis服务器发送 100个并发链接与 100000个请求测试性能
redis-benchmark -h 192.168.220.131 -p 6379 -q -d 100 //测试存取大小为100字节的数据包的性能
(二)Redis 多数据操做:
(1)Redis 支持多数据库,默认支持16个数据库,0-15 命名;
(2)多数据相互独立,互不干扰;
(3)多数据经常使用命令;
一、select:多数据库间的切换(默认是在数据库0中)
二、move:多数据库间移动数据
三、flushdb:清除数据库内数据
5、Redis 持久化:
(1)持久化概述:
Redis 是运行在内存中,内存中的数据断电就会丢失;
为了能重用 Redis 数据,或者防止系统故障,须要将 Redis 中的数据写入到磁盘空间中,即持久化。
(2)持久化分类:
一、RDB 方式:建立快照的方式获取某一时刻 Redis 中全部数据的副本。
二、AOF 方式:将执行的写命令写到文件的末尾,以日志的方式来记录数据的变化。
(3)RDB持久化:
一、它是 Redis的默认持久化方式,默认文件名为 dump.rdb
二、触发条件:
在指定的时间间隔内,执行指定次数的写操做(配置文件控制);
执行 save 或者是 bgsave (异步)命令;
执行 flushall 命令,清除数据库全部数据;
执行 shutdown 命令,保证服务器正常关闭且不丢失任何数据。
三、优缺点:
适合大规模的数据恢复;
若是业务对数据完整性和一致性要求不高,RDB 是很好的选择;
数据的完整性和一致性不高;
备份时占用内存。
四、经过 RDB 文件恢复数据:
将 dump.rdb 文件拷贝到 redis 的安装目录的 bin 目录下,重启 redis 服务便可。
五、配置文件选项:
vim /etc/redis/6379.conf
save 900 1 save 300 10 save 60 10000 //900秒以内至少一次写操做、300秒以内至少发生10次写操做、60秒以内发生至少10000次写操做,只要知足其一都会触发快照操做,注释全部的save项表示关闭 RDB dbfilename dump.rdb // RDB文件名称 dir /var/lib/redis/6379 // RDB文件路径 rdbcompression yes // 是否进行压缩
(4)AOF 持久化:
Redis 默认是不开启的;
弥补 RDB 的不足(数据的不一致性);
采用日志的形式来记录每一个写操做,并追加到文件中;
Redis 重启会根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工做。
一、根据 AOF 文件恢复数据:
将 appendonly.aof 文件拷贝到 redis 的安装目录的 bin 目录下,重启 redis 访问便可。
二、配置文件选项:
vim /etc/redis/6379.conf appendonly yes //开启AOF持久化 appendfilename "appendonly.aof" //AOF文件名称 appendfsync always appendfsync everysec appendfsync no //解释:always:同步持久化,每次发生数据变化会马上写入磁盘; everysec:默认推荐,每秒异步记录一次(默认值); no:不一样步,交给操做系统决定如何同步。 aof-load-truncated yes //忽略最后一条可能存在问题的指令
三、AOF 的重写机制:
AOF 的工做原理是将写操做追加到文件中,文件的冗余会愈来愈多;
当 AOF 文件的大小超过所设定的阈值时,Redis 就会对 AOF 文件的内容压缩;
四、AOF 的重写原理:
Redis 会 fork 出一条新进程,读取内存中的数据(并无读取旧文件),并从新到一个临时文件中,最后替换旧的 aof 文件。
五、AOF 的重写配置:
vim /etc/redis/6379.conf 在日志进行 BGREWRITEAOF 时,若是设置为 yes 表示新写操做不进行同步 fsync,只是暂存在缓冲区里,避免形成磁盘 IO 操做冲突,等重写完成后在写入。redis 中默认为 no no-appendfsync-on-rewrite no //当前 AOF文件大小是上第二天志重写时 AOF 文件大小两倍时,发生 BGREWRITEAOF操做 auto-aof-rewrite-percentage 100 //当前 AOF文件执行 BGREWRITEAOF命令的最小值,避免刚开始启动 redis 时因为文件尺寸较小致使频繁的 BGREWRITEAOF auto-aof-rewrite-min-szie 64mb
6、Redis 性能管理:
(1)内存碎片率:
一、操做系统分配的内存值 used_memory_rss 除以 redis 使用的内存值 used_memory 计算得出的;
二、内存碎片是由操做系统低效的分配/回收物理内存致使的;
不连续的物理内存分配
三、跟踪内存碎片率对理解 redis 实例的资源性能是很是重要的;
内存碎片率稍大于 1 是合理的,这个值表示内存碎片率比较低;
内存碎片率超过 1.5 ,说明 redis 消耗了实际须要物理内存的 150% ,其中 50% 是内存碎片率;
内存碎片率低于 1 的,说明 Redis 内存分配超出了物理内存,操做系统正在进行内存交换。
(2)内存使用率:
一、 redis 实例的内存使用率超过可用最大内存,操做系统开始进行内存与 swqp 空间交换;
二、避免内存交换:
针对缓存数据大小选择;
尽量的使用 Hash 数据结构;
设置 key 的过时时间
(3)回收 Key:
一、保证合理分配 redis 有限的内存资源;
二、当内存使用达到设置的最大阈值时,须要选择一种 key 的回收策略:
默认状况下回收策略是禁止删除的;
redis.conf 配置文件中修改 maxmemory-policy 属性值
--volatile-lru:使用L .RU算法从已设置过时时间的数据集合中淘汰数据 --voltil-tt:从已设置过时时间的数据集合中挑选即将过时的数据淘汰 --volatile-random:从已设置过时时间的数据集合中随机挑选数据淘汰 --allkeys-lru:使用LRU算法从全部数据集合中淘汰数据 --allkeys-random:从数据集合中任意选择数据淘汰 --no-enviction:禁止淘汰数据
补充:
1、关系数据库(SQL)和非关系数据库(NoSQL)简要介绍:
(1)关系型数据库(SQL):
一、一个结构化的数据库,建立在关系模型基础上,通常面向于记录;
二、包括 Oracle 、Mysql 、 SQL Server 、Microsoft Access 、DB2 等。
优势:
一、易于维护:都是使用表结构,格式一致;
二、使用方便:SQL语言通用,可用于复杂查询;
三、复杂操做:支持SQL,可用于一个表以及多个表之间很是复杂的查询。
缺点:
一、读写性能比较差,尤为是海量数据的高效率读写;
二、固定的表结构,灵活度稍欠;
三、对于高并发读写需求,传统关系型数据库来讲,硬盘I/O是一个很大的瓶颈。
(2)非关系型数据库(NoSQL):
一、除了主流的关系型数据库之外的数据库,都认为是非关系型的;
二、包括 Redis 、 MongBD 、 Hbase 、 CouhDB 、Memcache 等;
三、非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合,能够是文档或者键值对等。
优势:
一、格式灵活:存储数据的格式能够是 key-value(键-值)形式、文档形式、图片形式等等,文档形式、图片形式等等,使用灵活,应用场景普遍,而关系型数据库则只支持基础类型;
二、速度快:nosql可使用硬盘或者随机存储器做为载体,而关系型数据库只能使用硬盘;
三、高扩展性;
四、成本低:nosql数据库部署简单,基本都是开源软件。
缺点:
一、不提供sql支持,学习和使用成本较高;
二、不支持事务,容错率低;
三、数据结构相对复杂,复杂查询方面稍欠。
(3)非关系型数据库产生的背景:
High performance :对数据库高并发读写需求;
Huge Storage:对海量数据高效存储与访问需求;
High Scalability && High Availability:对数据库高可扩展性与高可用性需求。
如本文主角redis便为非关系型数据库。
2、Redis 和 Memcache 的比较:
一、存储方式:
Memecache把数据所有存在内存之中,断电后会挂掉,数据不能超过内存大小;
Redis有部份存在硬盘上,这样能保证数据的持久性。
二、数据支持类型:
Memcache对数据类型支持相对简单;
Redis有复杂的数据类型。
三、使用底层模型不一样:
它们之间底层实现方式以及与客户端之间通讯的应用协议不同;
Redis直接本身构建了VM 机制 ,由于通常的系统调用系统函数的话,会浪费必定的时间去移动和请求。
四、value大小:
redis最大能够达到1GB,而memcache只有1MB。
五、使用redis有哪些好处?
一、速度快,由于数据存在内存中,相似于HashMap,HashMap的优点就是查找和操做的时间复杂度都是O(1)
二、支持丰富数据类型,支持string,list,set,sorted set,hash
三、支持事务,操做都是原子性,所谓的原子性就是对数据的更改要么所有执行,要么所有不执行。
四、丰富的特性:可用于缓存,消息,按key设置过时时间,过时后将会自动删除。
redis 相比 memcached 的优点:
memcached全部的值均是简单的字符串,redis做为其替代者,支持更为丰富的数据类型;
redis的速度比memcached快不少;
redis能够持久化其数据;
Memcache 支持结构化,可是 Redis支持结构化和非结构化。