![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5SOmJWO1MWNldTMxETMiFzNjNDO1gjMmlTOyATZhVWMz8CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
介绍
Redis是可基于内存亦可持久化的Key-Value数据库(nosql数据库)
NoSQL,泛指非关系型的数据库
1. redis server 安装
2. redis server 安全配置
bind 127.0.0.1 注释掉
requirepass XXX密码 #初始为注释代码
protected-mode no # 初始为yes
daemonize yes # 如果为no,则改为yes
重启后生效,再操作就会要求登陆验证
3. 测试连接server
验证了密码后,就可以进行相关操作
4. 安装php redis扩展
我是用的宝塔:对应PHP版本-> 插件安装-> redis安装
使用宝塔安装方式,前3个步骤可省略,因为宝塔会自动安装其客户端软件。
目录在
,配置文件以及相关命令都在里面。
/www/server/redis
redis持久化前沿
AOF和RDB的区别
RDB:dump完整的db进行持久化,用
save m n
进行周期持久,性能消耗小,速度快,并且dump出的db可以转存到其它地方使用。
官方默认开启:save 900 1,save 300 10,save 60 10000,设置了这三项,分别代表900s 有1次更改操作则写入rdb
AOF:存储写日志的方式进行持久,appendfsync everysec:每秒同步一次,性能消耗大,安全系数高。
AOF和RDB如何取舍
对数据安全性要求比较高,可以两者同时使用。
要求不是那么高的话,可以只开RDB,因为RDB是备份数据库文件方式,所以方便我们进行备份工作。
开启持久化后,是否影响客户端读取性能?
两者的持久化方式都是异步方式(单独开启了一个守护进程),所以不会影响客户端的性能。
自动触发的场景
- save:根据我们的
/
save m n
配置规则自动触发:save 900 1 (900s周期,如果有1条更改操作(新增或修改),则进行持久化)
appendfsync everysec
- slave:节点之间全量复制时,主节点发送rdb文件给从节点完成复制操作,主节点会触发
bgsave
- shutdown:执行
时,如果没有开启aof,也会触发
shutdown
持久化的方式
RDB:redis db
在指定的 save m n
周期性对数据进行持久化。
RDB的2种执行方式
save:会阻塞当前Redis服务器,直到持久化完成,线上应该禁止使用。
bgsave:另开启一条bgsave主进程异步守护redis数据变化情况,会触发会多个子fork进程进行持久化,fork子进程会阻塞bgsave主进程,影响redis的少许性能。
AOF:appendonly filelog
记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始的数据。
1. AOF的2种执行方式
参考RDB方式。
appendfsync everysec:每秒同步一次,意味着有最多1秒的
他们在进行持久化的时候,都会生成2个文件(新文件/旧文件),保证在进行持久化过程中,有新的数据写入时,保持完整性,持久化完成后,新文件删除,继续用旧文件。
Redis数据类型
String(字符串)
- set:实例set / get。键为 name,对应的值为 wangkun。
- get:如上
Hash(哈希)
- hmset:实例中 hmset 设置了两个 field=>value 对
- hget:获取对应 field 对应的 value
List(列表)
- lpush key value:左插入,添加一个元素到列表的头部
- rpush key value:右插入,添加一个元素到列表的尾部
- lrange key start stop:显示列表的指定内容,格式:lrange mylist 0 10
- lpop key:移出并获取列表的第一个元素
- rpop key:移除并获取列表最后一个元素
- blpop key timeout:移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
- brpop key timeout:移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
- blpop和brpop,因为是阻塞式的,连接中的超时时间设置为0时,即可无限等待,直到弹出消息
Set(无序集合)
- sadd:向集合添加元素
- smembers:显示列表的所有元素内容
Zset(Sorted Set:有序集合)
- zadd:向集合添加元素,格式:zadd key score member
- zrange / zrangebyscore:显示集合的所有元素内容(根据score进行排序)
设置 key 过期时间
列出所有的key
命令:KEYS pattern
列出所有的key
列出匹配的key
删除 key
Redis 发布订阅
Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。
订阅
开启客户端client1...5
发布消息
Redis实现消息队列
可利用“List的阻塞功能” 或 “发布订阅” 功能实现消息队列功能。
List的阻塞功能
worker进行blpop某个List,只要有要处理的信息,立即处理。
发布订阅
客户端请求redis入队List数据,同时发布(PUBLISH)消息A到频道channel,此时已经订阅channel的worker就接收到了消息A,知道了List中有消息A进入,即可循环lpop或rpop来消费List中的消息。