redis是内存型数据库html
with open() 默认close关闭文件句柄python
word 工具 ,没保存前,数据都放在内存里,保存后,持久化到磁盘上,永久存在mysql
mysql是文件型数据库,默认持久化到磁盘上nginx
redis安装学习web
1.yum安装 ,最简单,配置yum源,yum仓库才能够 2.源码编译安装, 指定安装路径,自定制第三方扩展模块功能(nginx http web 80, 443 https, openssl功能扩展 ) 3.rpm软件包手动安装,很垃圾,手动解决依赖关系,不适用
编译安装redis,三部曲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服务端sql
redis-server 直接执行,便可启动服务端,可是,这样很不安全,容易被攻击数据库
指定配置文件,安全的启动redis服务端vim
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
redis是一种高级的key:value存储系统,其中value支持五种数据类型
经常使用命令 :
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 递减-1
list类型,双向队列
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 判断是否存在
PUBLISH channel msg
将信息 message 发送到指定的频道 channel
SUBSCRIBE channel [channel ...]
订阅频道,能够同时订阅多个频道
UNSUBSCRIBE [channel ...]
取消订阅指定的频道, 若是不指定频道,则会取消订阅全部频道
PSUBSCRIBE pattern [pattern ...]
订阅一个或多个符合给定模式的频道,正则匹配
PUNSUBSCRIBE [pattern [pattern ...]]
退订指定的规则, 若是没有参数则会退订全部规则
PUBSUB subcommand [argument [argument ...]]
查看订阅与发布系统状态
------防止数据丢失,持久化到本地,以文件形式保存
持久化的方式 ,两种 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,还得修改配置文件方可
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
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