redis学习之旅-初识Redis
定义:
redis是一种支持Key-Value等多种数据结构的存储系统。可用于缓存,事件发布或订阅,高速队列等场景。该数据库使用ANSI C语言编写,支持网络,提供字符串,哈希,列表,队列,集合结构直接存取,基于内存,可持久化。
Redis数据类型
1、 Redis一共支持五种数据类:string(字符串),hash(哈希),list(列表),set(集合)和zset(sorted set有序集合)。
2、php简单的操作redis的5种数据类型
1)php操作string类型所使用的常用方法:
set :
赋值
get :
获取值
decr:
减值
incr:
增值
2)php操作list类型所使用的常用方法:
lpush:从左边插入
rpush:从右边插入
lpop:从左边弹出
rpop:从右边弹出
llen:查看某个list数据类型的长度
3)php操作set类型所使用的常用方法:
sadd:添加
scard:统计元素个数
smembers:以数组形式统计元素个数
sismember:判断set数据中是否存在某个元素
srem:删除某个set数据中的元素
4)php操作hash类型所使用的常用方法:
hset:给属性赋值
hget:获取单个属性的值
hmget:获取多个属性的值
5)php操作sort-set数据类型所使用的常用方法:
zadd:给某个
score
添加值
zrange:从低到高查询
zrevrange:从高到低查询
php中安装
1.使用phpinfo()函数查看PHP的版本信息,这会决定扩展文件版本。
2.下载php_igbinary-1.2.1-5.5-ts-vc11-x64.zip,php_redis-2.2.5-5.6-ts-vc11-x64.zip(一定要保证版本的正确性)
3.解压缩后,将php_redis.dll和php_redis.pdb拷贝至php的ext目录下
4.修改php.ini,(PS:此php.ini文件是在Apache目录)在该文件中加入:
; php_redis
extension=php_igbinary.dll
extension=php_redis.dll
注意:extension=php_igbinary.dll一定要放在extension=php_redis.dll的前面,否则此扩展不会生效
5.重启Apache后,使用phpinfo查看扩展是否成功安装
6.打开redis服务后,可以用如下测试是否能够调用。
start D:\app\redis\redis-server.exe
start D:\app\redis\redis.windows.conf
1 <?php
2 //连接本地的 Redis 服务
3 $redis = new Redis();
4 $redis->connect('127.0.0.1', 6379);
Redis 持久化方式
一、两种方式:
1、RDB:以快照的形式存储到二进制文件中
1) 原理:每隔一段时间生成redis内存中的数据的一份完整的快照,
2) 配置:触发持久化的机制有手动触发和自动触发。
- 手动触发:执行bgsave命令即可
- 自动触发: 编辑配置文件: D:/app/redis/redis.windows..conf文件,手动配置检查点,一条save配置代表一个检查点,redis默认的机制是RDB,所以不涉及开启或不开启,我们只需要配置生成快照的时间方式即可,redis中默认有三条,我们可以自己根据实际业务需求设置时间,例如,我想每隔5s,只要有一条数据更新就生成快照
2、AOF:Redis的每次发生改变就写入到日志中
1) 原理:有数据写入redis,redis自身就会将数据写入aof日志文件,redis并不是直接写入aof文件,而是先写到os cache,然后到一定时间再从os cache会触发操作系统的fsync操作写到磁盘
2) 配置:同样有两种触发机制,手动触发和自动触发。
- 手动触发:执行bgrewriteaof命令即可
- 自动触发:由于redis默认的是RDB的持久化方式,AOF的方式默认是关闭的,所以,我们需要手动开启,我们打开D:/app/redis/redis.windows..conf配置文件
a) 打开AOF机制:appendonly yes
b) 配置rewrite
在配置文件中有两个配置,auto-aof-rewrite-percentage和auto-aof-rewrite-min-size
第一条命令的意思是,当aof日志文件中的大小大于上一次的一倍了,那就执行rewrite
第二条意思是,就算满足了第一条的条件,但是还是需要和auto-aof-rewrite-min-size配置的值进行比较,当aof的大小大于64m时才会进行rewrite操作
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
- AOF的三种写入方式,使用默认的everysec即可,即,每秒写入一次
# appendfsync always
appendfsync everysec
# appendfsync no
一、 redis持久化哪种方式更安全一些
AOF更安全
相比RDB,AOF会将每次发生改变的内容写入到日志里面,保证了数据的完整性,数据不会丢失,RDB以快照形式存储,如果快照时间过长,这个过程中的数据可能丢失,不能保证数据的完整性
Redis实现消息队列
1、可以直接使用Redis的List实现消息队列,只需简单的两个指令lpush和rpop或者rpush和lpop ,Redis不仅可作为缓存服务器,还可用作消息队列。它的列表类型天生支持用作消息队列。如下图所示:
2、队列有优先级的概念,我们就可以优先处理高级别的任务,实现方式有以下几种方式:
1)单一列表实现:队列正常的操作是 左进右出(lpush,rpop)为了先处理高优先级任务,在遇到高级别任务时,可以直接插队,直接放入队列头部(rpush),这样,从队列头部(右侧)获取任务时,取到的就是高优先级的任务(rpop)
2)使用两个队列,一个普通队列,一个高级队列,针对任务的级别放入不同的队列,获取任务时也很简单,redis的BRPOP命令可以按顺序从多个队列中取值,BRPOP会按照给出的 key 顺序查看,并在找到的第一个非空 list 的尾部弹出一个元素,redis> BRPOP list1 list2 0
list1 做为高优先级任务队列
list2 做为普通任务队列
这样就实现了先处理高优先级任务,当没有高优先级任务时,就去获取普通任务
方式1最简单,但实际应用比较局限,方式2是推荐用法,实际应用最为合适