关系数据库与非关系数据库
关系型数据库
非关系型数据库
区别
背景
总结
redis数据库
简介
优势
部署
关闭防火墙
编译安装redis
将包放在opt下
cd /opt/
yum install -y gcc gcc-c++ make
tar zvf redis-5.0.7.tar.gz
cd /opt/redis-5.0.7/
make && make PREFIX=/usr/local/redis install
执行脚本,输入路径![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/f5d6d6bb6a62ed047286a084dbc17bb0.png)
路径优化
ln -s /usr/local/redis/bin/* /usr/local/bin/
netstat -natp | grep 6379
配置文件修改
vim /etc/redis/6379.conf
70行,监听的主机地址
bind 127.0.0.1 192.168.221.20
93行默认的监听端口
port 6379
137行,守护进程启用
daemonize yes
159行,PID 文件
pidfile /var/run/redis_6379.pid
167行,日志级别
loglevel notice
172行,日志文件
logfile /var/log/redis_6379.log
/etc/init.d/redis_6379 restart
命令工具
redis-cli工具使用
redis-benchmark 工具
Redis 数据库命令
(1)set/get
存放数据,命令格式为 set key value
获取数据,命令格式为 get key
例:
redis-cli -p 6379
set name srs
get name
(2)keys 取值
keys
set a1 1
set a2 2
set a33 3
set b1 4
set b2 5
set b33 6
keys *
keys b*
keys b?
keys b??
(3)exists 判断值是否存在
exists name
exists aaaa
(4)del 删除key
keys *
del a1
keys *
(5)type 获取值的类型
type 命令可以获取 key 对应的 value 值类型
type a2
(6)rename 重命名(覆盖)
rename 命令是对已有 key 进行重命名。(覆盖)
命令格式:rename 源key 目标key
例:
keys b*
rename b31 b3
get b3
renamenx 命令的作用是对已有 key 进行重命名,并检测新名是否存在,如果目标 key 存在则不进行重命名。(不覆盖)
命令格式:renamenx 源key 目标key
(7)dbsize 查看库中key的数量
例:
keys *
dbsize
(8)设置密码
使用config set requirepass password命令设置密码
例:
config set requirepass 123
auth 123
config get requirepass
quit
redis-cli -p 6379
keys *
auth 123
keys *
多数据库常用命令
(1)多数据库间切换
命令格式:select 序号
(2)多数据库间移动数据
格式:move 键值 序号
高可用
持久化
RDB 持久化
启动时加载
AOF 持久化
原理是将 Reids 的操作日志以追加的方式写入文件,类似于MySQL的binlog。
开启AOF
修改redis配置文件
流程
命令追加(append)
文件写入(write)和文件同步(sync)
vim /etc/redis/6379.conf
#----------729行----------
appendfsync everysec
文件重写(rewrite)
vim /etc/redis/6379.conf
#771行---------------------------------------------------
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
#重写由父进程fork子进程进行;
#重写期间Redis执行的写命令,需要追加到新的AOF文件中,为此Redis引入了aof_rewrite_buf缓存。
重写流程
RDB优缺点
RDB持久化
AOF持久化
性能管理
查看Redis内存使用
redis调优————————内存碎片率
计算公式
出现原因
redis自身的内存分配器。
修改cache的值,且修改后的value与原来value的大小差异较大。
进程需要用内存的话,会先通过OS向device申请,然后才能够使用。一般进程在不需要使用的时候,会释放掉这部分内存并返回给device。但是redis作者可能为了更高的性能,所以在redis中实现了自己的内存分配器来管理内存,不会马上返还内存,不用每次都向OS申请了,从而实现高性能。
但是,redis的每个k-v对初始化的内存大小是最适合的,当这个value改变的并且原来内存大小不适用的时候,就需要重新分配内存了。(但是value存比原来小不知道会不会产生碎片)。重新分配之后,就会有一部分内存redis无法正常回收,一直占用着。
解决方法
限制内存交换: 如果内存碎片率低于1,Redis实例可能会把部分数据交换到硬盘上,应该增加可用物理内存或减少实Redis内存占用,设置maxmemory和回收策略可以避免强制内存交换
重启Redis服务器:如果内存碎片率超过1.5,重启Redis服务器可以让额外产生的内存碎片失效并重新作为新内存来使用,使操作系统恢复高效的内存管理。额外碎片的产生是由于Redis释放了内存块,但内存分配器并没有返回内存给操作系统
内存碎片清理:Redis 4.0-RC3 以上版本,使用jemalloc作为内存分配器(默认的) 支持内存碎片清理
支持在运行期进行自动内存碎片清理
设置自动清理 config set activedefrag yes,使用config rewrite 将redis内存中新配置刷新到配置文件
支持通过命令 memory purge 进行手动清理(与自动清理区域不同)
内回收key
配置文件中修改 maxmemory-policy 属性值:
vim /etc/redis/6379.conf
#---------598取消注释---------------------------------------------------------------------------
maxmemory-policy noenviction