Redis基础及进阶
Posted can-xue
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis基础及进阶相关的知识,希望对你有一定的参考价值。
1. redis安装
redis是内存型数据库
- 数据默认写入到内存,如果断电,服务器宕机,redis进程挂掉,数据会丢失
- selenium操作浏览器时,要注意浏览器资源释放,防止内存泄漏,崩溃
with open() 默认close关闭文件句柄
word 工具 ,没保存前,数据都放在内存里,保存后,持久化到磁盘上,永久存在
mysql是文件型数据库,默认持久化到磁盘上
redis安装学习
1.yum安装 ,最简单,配置yum源,yum仓库才可以 2.源码编译安装, 指定安装路径,自定制第三方扩展模块功能(nginx http web 80, 443 https, openssl功能扩展 ) 3.rpm软件包手动安装,很垃圾,手动解决依赖关系,不适用
编译安装redis,三部曲
解决编译安装所需的依赖环境 yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel openssl openssl-devel -y
1.下载源代码包 wget http://download.redis.io/releases/redis-4.0.10.tar.gz 2.解压缩 tar -zxvf redis-4.0.10.tar.gz 3. ./configure --prefix=/opt/redis/ #释放makefile,告诉gcc编译器,redis的安装路径 如果默认没有configure脚本,出现了makefile,直接make&&make install 安装即可 4.编译且安装 make && make install
编译完成后,即可使用redis
启动redis服务端redis-server 直接执行,即可启动服务端,但是,这样很不安全,容易被攻击
指定配置文件,安全的启动redis服务端
- 更改启动端口
- 添加redis密码
- 开启redis安全模式
redis的默认配置文件是 redis.conf
#过滤出配置文件的有益信息(去除空白行和注释行) grep -v "^#" redis.conf |grep -v "^$" #将redis.conf文件内容输出到s21redis.conf文件中: grep -v "^#" redis.conf |grep -v "^$" >s21redis.conf
指定配置文件启动
文件内容:bind 192.168.182.130 #绑定服务端地址 protected-mode yes #安全模式 port 6800 #端口 requirepass haohaio #密码 daemonize yes #后台运行 pidfile /var/run/redis_6379.pid #进程id文件 loglevel notice #日志等级 logfile ""
#指定文件启动: redis-server s21redis.conf #其中:输入auth 输入密码 haohaio
2. 数据类型
redis是一种高级的key:value存储系统,其中value支持五种数据类型
- 字符串(strings)
- 散列(hashes)
- 列表(lists)
- 集合(sets)
- 有序集合(sorted sets)
常用命令 :
keys * 查看所有key
type key 查看key类型
expire key seconds 过期时间
ttl key 查看key过期剩余时间 -2表示key已经不存在了
persist 取消key的过期时间 -1表示key存在,没有过期时间
exists key 判断key存在 存在返回1 否则0
del keys 删除key 可以删除多个
dbsize 计算key的数量
flushdb 清除redis所有key,慎用
flushdb 清除redis所有key,慎用
flushdb 清除redis所有key,慎用
字符串类型,通过set命令,设置字符串类型的key
strings类型
set 设置key
get 获取key
append 追加string
mset 设置多个键值对
mget 获取多个键值对
del 删除key
incr 递增+1
decr 递减-1list类型,双向队列
lpush 从列表左边插
rpush 从列表右边插
lrange 获取一定长度的元素 lrange key start stop
ltrim 截取一定长度列表
lpop 删除最左边一个元素
rpop 删除最右边一个元素
lpushx/rpushx key存在则添加值,不存在不处理set集合
redis的集合,是一种无序的集合,集合中的元素没有先后顺序。
集合相关的操作也很丰富,如添加新元素、删除已有元素、取交集、取并集、取差集等。我们来看例子:
sadd/srem 添加/删除 元素
sismember 判断是否为set的一个元素
smembers 返回集合所有的成员
sdiff 返回一个集合和其他集合的差异
sinter 返回几个集合的交集
sunion 返回几个集合的并集哈希数据结构
hashes即哈希。哈希是从redis-2.0.0版本之后才有的数据结构。hashes存的是字符串和字符串值之间的映射,比如一个用户要存储其全名、姓氏、年龄等等,就很适合使用哈希。
hset 设置散列值
hget 获取散列值
hmset 设置多对散列值
hmget 获取多对散列值
hsetnx 如果散列已经存在,则不设置(防止覆盖key)
hkeys 返回所有fileds
hvals 返回所有values
hlen 返回散列包含域(field)的数量
hdel 删除散列指定的域(field)
hexists 判断是否存在
3. 发布订阅
PUBLISH channel msg
将信息 message 发送到指定的频道 channel
SUBSCRIBE channel [channel ...]
订阅频道,可以同时订阅多个频道
UNSUBSCRIBE [channel ...]
取消订阅指定的频道, 如果不指定频道,则会取消订阅所有频道
PSUBSCRIBE pattern [pattern ...]
订阅一个或多个符合给定模式的频道,正则匹配
PUNSUBSCRIBE [pattern [pattern ...]]
退订指定的规则, 如果没有参数则会退订所有规则
PUBSUB subcommand [argument [argument ...]]
查看订阅与发布系统状态
4. redis持久化
------防止数据丢失,持久化到本地,以文件形式保存
持久化的方式 ,两种 aof和 rdb模式
1.rdb
触发机制,
1.手动执行save命令 2.或者配置触发条件 save 200 10 #在200秒中内,超过10个修改类的操作
建立redis配置文件,开启rdb功能
配置文件 s21_rdb.conf 内容如下 ,有关rdb的配置参数是 dbfilename dbmp.rdb ,一个是 save 900 1
daemonize yes port 6379 logfile /data/6379/redis.log dir /data/6379 #定义持久化文件存储位置 dbfilename s21redis.rdb #rdb持久化文件 bind 127.0.0.1 #redis绑定地址 requirepass redhat save 900 1 save 300 10 save 60 10000 save 20 2 #在20秒内,超过2个修改类的操作
2.aof
--------将你的修改类的操作命令,追加到日志文件中
修改aof配置文件,添加如下参数,核心功能参数是
appendonly yes
appendfsync always 总是修改类的操作
everysec 每秒做一次持久化
no 依赖于系统自带的缓存大小机制
创建aof配置文件s21aof.conf ,内容如下
3.rdb模式下的redis持久化,不重启切换为 aof模式
环境准备
1.准备一个有数据的rdb模式的redis数据库
准备rdb配置文件
daemonize yes
port 6379
logfile /data/6379/redis.log
dir /data/6379 #定义持久化文件存储位置
dbfilename s21redis.rdb #rdb持久化文件
bind 127.0.0.1 #redis绑定地址
requirepass redhat
save 900 1
save 300 10
save 60 10000
save 20 2 #在20秒内,超过2个修改类的操作
#详细看博客https://www.cnblogs.com/pyyu/p/10061526.html
2.注意想要永久切换为aof,还得修改配置文件方可
5. 主从复制
redis支持多实例的功能,一台机器上,可以运行多个单个的redis数据库
环境准备,运行3个redis数据库,达到 1主 2从的配置
主库 6379.conf port 6379 daemonize yes pidfile /data/6379/redis.pid loglevel notice logfile "/data/6379/redis.log" dbfilename dump.rdb dir /data/6379 从库 6380 port 6380 daemonize yes pidfile /data/6380/redis.pid loglevel notice logfile "/data/6380/redis.log" dbfilename dump.rdb dir /data/6380 slaveof 127.0.0.1 6379 从库 6381 port 6381 daemonize yes pidfile /data/6381/redis.pid loglevel notice logfile "/data/6381/redis.log" dbfilename dump.rdb dir /data/6381 slaveof 127.0.0.1 6379
开启主从复制功能
redis-cli info #查看数据库信息
redis-cli info replication在6380 和6381数据库上 ,配置主从信息,通过参数形式修改配置,临时生效,注意要写入配置文件
redis-cli -p 6380 slaveof 127.0.0.1 6379 redis-cli -p 6381 slaveof 127.0.0.1 6379
此时检查6379的复制信息,以及6380 6381的复制信息
redis-cli -p 6380 info replication redis-cli -p 6381 info replication
主从复制是 读写分离的,master可写, slave只读
模拟主从复制故障,手动切换master-slave身份
1.杀死6379进程 ,干掉主库 2.手动切换 6381为新的主库,需要先关闭它的从库身份 redis-cli -p 6381 slaveof no one 3.修改6380的新主库是 6381 redis-cli -p 6380 slaveof 127.0.0.1 6381
6. redis哨兵
redis-sentinel功能
1.环境准备
三个redis数据库实例 ,配置好 1主 2从的配置
6379.conf
port 6379
daemonize yes
logfile "6379.log"
dbfilename "dump-6379.rdb"
dir "/var/redis/data/"
6380.conf
port 6380
daemonize yes
logfile "6380.log"
dbfilename "dump-6380.rdb"
dir "/var/redis/data/"
slaveof 127.0.0.1 6379
6381.conf
port 6381
daemonize yes
logfile "6381.log"
dbfilename "dump-6381.rdb"
dir "/var/redis/data/"
slaveof 127.0.0.1 6379
三个redis哨兵进程,指定好,检测着谁
也是准备三个配置文件,内容如下
vim sentinel-26379.conf
port 26379
dir /var/redis/data/
logfile "26379.log"
// 当前Sentinel节点监控 192.168.182.130:6379 这个主节点
// 2代表判断主节点失败至少需要2个Sentinel节点节点同意
// mymaster是主节点的别名
sentinel monitor s21ms 0.0.0.0 6379 2
//每个Sentinel节点都要定期PING命令来判断Redis数据节点和其余Sentinel节点是否可达,如果超过20000毫秒20s且没有回复,则判定不可达
sentinel down-after-milliseconds s21ms 20000
//当Sentinel节点集合对主节点故障判定达成一致时,Sentinel领导者节点会做故障转移操作,选出新的主节点,原来的从节点会向新的主节点发起复制操作,限制每次向新的主节点发起复制操作的从节点个数为1
sentinel parallel-syncs s21ms 1
//故障转移超时时间为180000毫秒
sentinel failover-timeout s21ms 180000
#三个哨兵的配置文件,一模一样,仅仅是端口的区别
#三个哨兵的配置文件,一模一样,仅仅是端口的区别
#三个哨兵的配置文件,一模一样,仅仅是端口的区别
sed "s/26379/26380/g" sentinel-26379.conf >sentinel-26380.conf
配置sentinel-26380.conf
sed "s/26379/26381/g" sentinel-26379.conf >sentinel-26381.conf
配置sentinel-26381.conf
2.分别启动 三个redis数据库, 以及三个 哨兵进程 ,注意 ,哨兵第一次启动后,会修改配置文件,如果错了,得删除配置文件,重新写
2.分别启动 三个redis数据库, 以及三个 哨兵进程 ,注意 ,哨兵第一次启动后,会修改配置文件,如果错了,得删除配置文件,重新写
2.分别启动 三个redis数据库, 以及三个 哨兵进程 ,注意 ,哨兵第一次启动后,会修改配置文件,如果错了,得删除配置文件,重新写
配置文件在这里
sentinel-26379.conf
port 26379
dir /var/redis/data/
logfile "26379.log"
sentinel monitor s21ms 127.0.0.1 6379 2
sentinel down-after-milliseconds s21ms 20000
sentinel parallel-syncs s21ms 1
sentinel failover-timeout s21ms 180000
#加一个后台运行
daemonize yes
#仅仅是端口的不同
sentinel-26380.conf
?
sentinel-26381.conf
#启动
redis-sentinel sentinel-26379.conf
redis-sentinel sentinel-26380.conf
redis-sentinel sentinel-26381.conf
3.验证哨兵是否正常
redis-cli -p 26379 info sentinel
看到master0:name=s21ms,status=ok,address=127.0.0.1:6379,slaves=2,sentinels=3
表示没问题
4.干掉主库 ,检查主从切换状态
kill -9 12749
ps -ef|grep redis
redis-cli -p 6380 info replication
redis-cli -p 6381 info replication
redis-cli -p 6380 info replication
redis-cli -p 6381 info replication
以上是关于Redis基础及进阶的主要内容,如果未能解决你的问题,请参考以下文章