作者:烨竹
Redis概述
一、memcache的不足之处
1、没有密码
2、Memcache是存储内存但是没有自带的备份检测功能。一旦服务器重启数据会丢失
3、Memcache只支持一种数据类型。操作麻烦 例如存储PHP中数组有其中一个元素的内容有修改。需要将原始的数据取出然后修改在整体的写入
二、Redis介绍
Redis是将数据写入到内存中的数据库(一般使用为缓存系统)。Redis支持数据持久化功能,并且Redis所支持的数据类型比较多。一般说有五种数据类型 分别为字符串、链表、哈希、无序集合与有序集合
三、Redis特性
1、读写速度快
同样是使用内存存储数据每秒钟数据读写速度可以达到11M/s
2、支持持久化功能
当服务器异常重启内存中的数据不丢失会自动的还原
3、支持的数据类型多
支持5种数据类型
4、支持主从复制
支持主从复制同步数据因此可以读写分离操作
四、redis与memcache中的选择
如果纯粹缓存系统重启服务器容许数据丢失可以建议选择memcache。如果需要长期保存内存中的数据就选择使用redis
redis安装
一、windows安装redis
Windows版本仅限于测试使用
安装redis:①创建redis的根目录
![]()
②拷贝redis的安装包
![]()
③使用cmd启动redis
![]()
目前redis已经正常启动,但是目前redis整个属于前台启动的方式即挂起状态
④使用redis客户端
再次新开一个cmd使用客户端
![]()
php7 redis扩展安装以及简单使用
1、下载扩展文件
查看phpinfo
![]()
根据自己的版本去https://pecl.php.net/package/redis/4.0.2/windows下载 自己相应版本的php_redis扩展
2、扩展文件拷贝到php扩展目录
![]()
3、修改PHP的配置文件 引入扩展文件
![]()
4、重启apache查看
![]()
5、php简单操作redis
![]()
二、linux(centos7 php7)安装redis
安装redis
//安装redis
yum install redis
//修改配置
vi /etc/redis.conf
//daemonize yes 后台运行
//appendonly yes 数据持久化
service redis start
安装php-redis扩展
//先装git
yum install git
//git下扩展
cd /usr/local/src
git clone https://github.com/phpredis/phpredis.git
//安装扩展
cd phpredis
phpize
//修改php配置
vi /etc/php.ini 添加extension=redis.so
//重启php
service php-fpm restart
基本使用
一、基本使用演示
![]()
二、redis命名规则
1、键名劲量简短
2、键名需要设置为 看到名称就知道含义
在redis中对键名没有任何要求 是采用二进制的方式存储
![]()
三、redis常用公共命令
公共命令即对所有的数据类型都可以使用的命令
1、exists
作用:检查某个键名是否存在
语法:exists keyname
![]()
2、Del
作用:删除某个key
语法:del keyname
![]()
3、type
作用:查看数据类型
语法:type keyname
![]()
在redis中数据类型没有区分整形字符串等对外都是字符串但是在redis内置是有进行区分的
4、keys
作用:查看满足条件的key
语法:keys pattern
![]()
建议开发不要使用
5、rename
作用:修改key名称
语法:rename oldkey newkey
![]()
![]()
6、expire
作用:为某个key设置有效时间
语法:expire keyname number(为秒数的有效时间)
7、ttl
作用:查看某个key的有效时间
语法:ttl keyname
![]()
如果对key没有设置有效时间表示为永久有效
8、select db
作用:选择数据库
语法:select number(数字需要根据配置文件中所提供的数据库的个数决定)
①查看配置文件
![]()
②再次使用客户端查看
![]()
9、flushdb
作用:清空数据库
语法:flushdb
![]()
redis五种数据类型
一、字符串
1、字符串介绍
Redis最基本的数据类型
可以包含任何数据,比如jpg图片或者序列化的对象(PHP中对象序列化函数serialize)。
单个value最大值上限是512M
如果说只用这种类型,Redis就像一个可以持久化的memcached服务器
Redis内置是区分了字符串 跟整形以及小数
2、字符串的常用命令
![]()
3、命令演示
①批量设置与获取数据:MGET
![]()
②查看字符串长度:STRLEN
![]()
③自增长:INCR
![]()
④追加:APPEND
![]()
⑤substr
![]()
二、链表
1、链表介绍
链表为一种”线型数据结构”。在一个链表中有多个字符串的数据(每一个字符串数据都是单独)并且每个之间存在一定的顺序关系。
![]()
在链表中可以在表头跟表尾(左侧跟右侧)添加或者删除“元素”。因此链表结构时一种双向的,因此可以实现队列与栈的效果。链表可以实现抢购、邮件发送、消息推送、最近登录用户登录
2、链表常用命令
![]()
链表数据操作劲量值操作表头跟表尾
3、命令演示
①演示链表添加与查看
![]()
②使用llen查看链表的长度
![]()
③删除链表中元素
![]()
④链表截取
![]()
三、哈希
1、介绍
hash是一个string类型的field和value的映射表。hash特别适合用于存储对象。相较于将对象的每个字段存成单个string类型。将一个对象存储在hash类型中会占用更少的内存,并且可以更方便的存取整个对象。 哈希数据类型可以存储PHP中数组或者对象
2、哈希常用命令
![]()
3、命令演示
①哈希添加与查看
![]()
②检查某个field是否存在
![]()
③查看哈希中数据
![]()
四、无序集合
1、集合介绍
很多个单独的字符串组合在一起 每一个都是单独。在集合中不容许出现重复。对于集合与集合之间可以进行交集、并集、差集等运算。集合最典型的应用场景为社交项目
2、集合常用命令
![]()
3、命令演示
①集合添加与查看
![]()
②随机弹出集合元素
![]()
③求交集
两个集合公共部分
![]()
④求并集
两个集合组合一起公共部分值保留一份
5.png
⑤求差集
求差集的所有元素排除掉公共部分 在A集合中出现但是在B集合中没有出现的元素
![]()
五、有序集合
1、有序集合介绍
与无序集合是一致的但是在有序集合中增加一个权重(分支)标出顺序关系
2、常用命令
zadd key score member 添加元素到集合中
zrem key member 删除指定元素
zcard key返回集合中的元素个数
zincrby key num member 将member上的分值增加num
zrank key member返回指定元素在集合中的排名 score从小到大排名
zrange key start end 获取集合中指定区间的元素分值排序
![]()
持久化
一、持久化介绍
对于redis数据存储在内存中不够安全,为了解决这个问题redis提供了持久化功能。会将数据保存到磁盘上。一旦异常情况出现。当redis服务器再次启动 redis会自动的将数据还原到到内存中
二、快照备份(默认)
快照方式默认就会开启。
1、快照配置信息
①查看备份文件相关配置
![]()
②查看备份频率
![]()
对于上述配置信息中的三个save都是用于控制备份频率。每一个save代表一个条件,只要有一个条件满足都会执行备份工作
Save 900 1:900秒之内(距离上一次备份的时间)有一个key发生变化执行备份功能
Save 300 10:300秒之内有10个key发生变化执行备份
Save 60 10000:60秒之内 有一万个key发生变化执行备份
2、手动备份
Save:save属于阻塞模式。一旦进行备份,只有备份完毕之后客户端才可以使用redis
Bgsave:属于后台备份方式。在备份期间客户端还可以再次操作redis
![]()
例如现在16:30执行了备份,下次备份的时间为16:40,在项目运行使用突然在16:35时宕机重启。会导致丢失了5分钟的数据
三、AOF备份
此方式的备份是记录每次数据修改的命令
①开启aof备份
先修改配置文件
![]()
在重启服务器
![]()
②进入客户端查看现有数据
![]()
当开启aof备份之后redis会清空现有的数据
③写入数据
![]()
④查看结果
![]()
⑤查看关于aof备份的频率
![]()
三个值always、everysec、no用于控制AOF备份频率
当往文件中写入内容时是先写入到缓存区,达到一定的条件之后在通过系统调用将内容真正的写入到磁盘上。对于aof备份的三个参数就是用于控制缓存区的刷新的频率
Always:每次只要key有修改 就刷新写入文件(频繁度太大会导致系统调用太多,因此导致服务器性能不太好)
Everysec:每秒钟刷新一次
No:由操作系统决定什么时候刷新
主从复制
一、主从复制的作用
主从复制是用于实现同步数据
1、实现读写分离
2、实现数据热备份(容灾备份)
3、用于实现统计相关的运算(在从上进行数据查询相关的操作减少对生产的数据库产生影响)
二、实现主从复制
①创建一个从服务器
安装方式同redis安装
②修改从服务器的配置文件
修改为后台启动
![]()
指定从那台服务器开始同步
![]()
③确保主服务器防火墙可以正常通过
![]()
④确保主服务器的redis服务已经启动
![]()
⑤启动从服务器的redis
![]()
⑥测试
查看从服务器中的数据是否与主服务器数据一致
![]()
网友评论