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)       配置:触发持久化的机制有手动触发和自动触发。

  1. 手动触发:执行bgsave命令即可
  2. 自动触发: 编辑配置文件: 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)       配置:同样有两种触发机制,手动触发和自动触发。

  1. 手动触发:执行bgrewriteaof命令即可
  2. 自动触发:由于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

  1. 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是推荐用法,实际应用最为合适

 

posted @ 2019-05-17 14:26  艾薇-Ivy  阅读(240)  评论(0编辑  收藏  举报