基础理论
1,redis是非关系型数据库,是内存或者缓存数据库,以K-V键值对形式存在,数据保存在内存中,单数会定期将数据写入磁盘中,属于存储高热数据库,
2,redis的优点
支持内存缓存,有极高的数据读写速度
支持持久化保存,可以存储队形,数据类型更多,支持集群,分布式
支持对垒,支持数据备份、
具有原子性
支持丰富的数据类型:string 字符串,list 列表,set 集合,hash散列值,ordered set 有序集合。
3,非关系数据库和关系数据库区别
一,最大的区别在扩展方式是没支持日益增长的需求,SQL是纵向扩展,提高处理能力,是处理速度更快,NOSQL是横向扩展,数据库存储是分布式的,数据库扩展可以通过资源持添加更多数据库节点来分二,存储方式不通,关系型是依赖关系模型E-R图,以表格方式存储数据,非关,出了表哥之外,通常那会以大块的形式组合在一起存储数据
三,对植物的支持不同,关系型适合高事务性要求和需要控制执行计划的任务,非关,稍微若是,其价值高于扩展性和大数据量处理
4,redis单进程模型,redis在一个服务器上可以同时启动多个进行,主要靠主进行处理的执行效率,生产环境会根据需求决定开启多少个redis进程
建议两个。
radis部署
关闭防火墙,核心防护
安装依赖环境
yum -y install gcc gcc-c++ make
make
[root@redis redis]# tar zxvf redis-5.0.7.tar.gz -C /opt '//redis源码包可以直接到官网下载'
[root@redis redis]# cd /opt/redis-5.0.7/
[root@redis redis-5.0.7]# make '//直接进行make'
[root@redis redis-5.0.7]# make PREFIX=/usr/local/redis/ install '//指定redis目录并安装
配置执行脚本
[root@manager utils]# ./install_server.sh
Welcome to the redis service installer
This script will help you easily set up a running redis server
Please select the redis port for this instance: [6379] '//回车
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf] //回车
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log] //回车
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379] //回车
Selected default - /var/lib/redis/6379
Please select the redis executable path [] /usr/local/redis/bin/redis-server // 指定目录
Selected config:
Port : 6379
Config file : /etc/redis/6379.conf
Log file : /var/log/redis_6379.log
Data dir : /var/lib/redis/6379
Executable : /usr/local/redis/bin/redis-server
Cli Executable : /usr/local/redis/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!
[root@manager utils]#
安装启动成功
优化redis
ln -s /usr/local/redis/bin/* /usr/local/bin
[root@manager utils]# ln -s /usr/local/redis/bin/* /usr/local/bin
[root@manager utils]# netstat -ntap |grep 6379
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 22045/redis-server
[root@manager utils]# /etc/init.d/redis_6379 stop
Stopping ...
Waiting for Redis to shutdown ...
Redis stopped
[root@manager utils]# /etc/init.d/redis_6379 start
Starting Redis server...
[root@manager utils]# netstat -ntap |grep 6379
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 22148/redis-server
tcp 0 0 127.0.0.1:6379 127.0.0.1:60066 TIME_WAIT -
配置监听端口,启动服务
vim /etc/redis/6379.conf
/etc/init.d/redis_6379 restart 重启服务
redis命令工具
redis-server :启动redis工具
redis-benchmark:用于检查redis本机运行效率
redis-check-aof:修复AOF持久化文件
redis-check-rdb: 修复RDB持久化文件
redis-cli -h 192.168.17.20 -p 6379 用于登录
-h:指定主机
-p:指定端口
-a:指定密码
压测
基础操作
[root@manager utils]# redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> set username abc //创建表和把内容
OK
127.0.0.1:6379> set user abc //创建
OK
127.0.0.1:6379> keys * //查看所有键
1) "username"
2) "myset:__rand_int__"
3) "mylist"
4) "key:__rand_int__"
5) "counter:__rand_int__"
6) "user"
127.0.0.1:6379> get user //读取指定键的内容
"abc"
127.0.0.1:6379> exists user //查看是否存在
(integer) 1
127.0.0.1:6379> del user ///删除
(integer) 1
127.0.0.1:6379> keys *
1) "username"
2) "myset:__rand_int__"
3) "mylist"
4) "key:__rand_int__"
5) "counter:__rand_int__"
127.0.0.1:6379> rename username aaa //重命名
OK
127.0.0.1:6379> keys *
1) "myset:__rand_int__"
2) "aaa"
3) "mylist"
4) "key:__rand_int__"
5) "counter:__rand_int__"
127.0.0.1:6379> exit
[root@manager utils]#
将第0个库的aaa移植到第12个库中
[root@manager utils]# redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> select 11
OK
127.0.0.1:6379[11]> keys *
(empty list or set)
127.0.0.1:6379[11]> select 0
OK
127.0.0.1:6379> keys *
1) "myset:__rand_int__"
2) "aaa"
3) "mylist"
4) "key:__rand_int__"
5) "counter:__rand_int__"
127.0.0.1:6379> move aaa 11
(integer) 1
127.0.0.1:6379> select 11
OK
127.0.0.1:6379[11]> keys *
1) "aaa"
127.0.0.1:6379[11]>
redis的持久化
概述:
redis运行在内存中,数据容易丢失,防止系统故障,要把redis写到磁盘空间,就是持久化,永久保存数据
分类“
RDB方式:创建快照的方式获取某一时刻Redis中所有数据的副本
AOF方式:将执行的写命令写到文件的末尾,以日志的方式来记录数据的变化
rdb持久化
默认的方式,默认文件名为dump.rdb
触发条件:
在指定的时间间隔内,执行指定次数的写操作(配置文件控制)
执行save或者是bgsave(异步)命令
执行flushall命令,清空数据库所有数据
执行shutdown命令,保证服务器正常关闭且不丢失任何数据
优缺点
适合大规模的数据恢复
如果业务对数据完整性和一致性要求不高,RDB是很好的选择
数据的完整性和一致性不高
备份时占用内存
通过RDB文件恢复数据
将dump.rdb文件拷贝到redis的安装目录的bin目录下,重启redis服务即可
配置:
[root@redis 6379]# vim /etc/redis/6379.conf '//修改配置文件'
'//搜索save,找到如下'
save 900 1 '//900秒之内至少一次写操作'
save 300 10 '//300秒内至少10次写操作'
save 60 10000 '//60秒内至少10000次写操作'
'//只要满足其一都会触发快照操作,注释所有的save项表示关闭RDB'
dbfilename dump.rdb '//RDB文件名称'
dir /var/lib/redis/6379 '//RDB文件路径'
rdbcompression yes '//开启了压缩功能
AOF持久化
AOF是将操作追加到问价中,文件内容冗余越来越多,AOF文件的大小想超过锁设定的阈值,就会进行压缩
redis的fork出一个新的进程,读取内存中的数据,从新写到一个临时文件汇总,最后替换原理的aof
vim /etc/redis/6379.conf
no-appendfsync-on-rewrite no '//在日志进行BGREWRITEAOF时, 如果设置为yes表示新写操作不进行同步fsync,只暂存在缓冲区里,避免造成磁盘I0操作冲突,等重写完成后在写入。redis中默认为no'
auto-aof-rewrite-percentage 100 '//当前AOF文件大小是上次日志重写时AOF文件大小两倍时,发生BGREWRITEAOF操作'
auto-aof-rewrite-min-size 64mb '//当前AOF文件执行BGREWRITEAOF命令的最小值,避免刚开始启动Reids时由于文件尺寸较小导致频繁的BGREWRITEAOF.当AOF文件到达64M的时候,发生BGREWRITEAOF操作'