您现在的位置是: 首页 >  MySQL MySQL

NOSQL数据库之 - Redis(3)

冬寂 2020-08-28 14:36:44 【MySQL】 571人已围观

七、php支持redis

1、安装php支持redis的扩展。

(1)准备扩展,

(2)把扩展文件复制到php的安装目录里面的ext目录里面

(3)打开php.ini文件,进行引入扩展,

(4)重启apache服务器,进行测试

2、入门案例:

步骤:
(1)创建一个redis的对象

$redis = new Redis();

(2)连接redis服务器

$redis->connect(‘ip地址’);

(3)权限密码验证

$redis->auth(‘密码’);

(4)使用函数指令完成数据的操作

添加数据代码如下:
<?php
$redis = new Redis();
$redis->connect(‘192.168.1.180’);
$redis->auth(‘beijing’);
//添加字符串数据
//$redis->set(‘username’,’xiaowanzi’);
//添加哈希类型的数据
//$redis->hmset(‘hash1’,array(‘id’=>100,’name’=>’xiaohei’,’age’=>12));
//添加链表数据
//$redis->lpush(‘list1’,’张三丰’);
//$redis->lpush(‘list1’,’宋江’);
//$redis->lpush(‘list1’,’张无忌’);
//$redis->lpush(‘list1’,’xiaohai’);
//添加集合类型数据
//$redis->sadd(‘set1’,’xiongda’);
//$redis->sadd(‘set1’,’xionger’);
//天假有序集合类型
$redis->zadd(‘zset1’,10,’guangouqing’);
$redis->zadd(‘zset1’,20,’bengbeng’);
?>
获取数据代码如下;

<?php
header("content-type:text/html;charset=utf-8");
$redis  = new Redis();
$redis->connect('192.168.1.180');
$redis->auth('beijing');
//获取字符串类型数据
var_dump($redis->get('username'));
echo '<br>';
//获取哈希类型的数据
var_dump($redis->hgetall('hash1'));
echo '<br>';

//获取链表类型的数据
var_dump($redis->lrange('list1',0,-1));
echo '<br>';
//获取集合类型的数据
var_dump($redis->smembers('set1'));
echo '<br>';
//获取有序集合类型的数据
var_dump($redis->zrange('zset1',0,-1));
echo '<br>';

效果如下;

注意:如果无法添加成功,或其他错误,则要关闭linux里面 的防火墙,
关闭防火墙的语法:

service iptables stop

八、持久化机制

redis为了内存数据的安全考虑,会把内存中的数据以文件形式保存到硬盘中一份,在服务器重启之后会自动把硬盘的数据恢复到内存(redis)的里边。
数据保存到硬盘的过程就称为“持久化”效果。

redis支持两种持久化方式:

  • (1)snapshotting(快照)默认方式
  • (2)append-only file(缩写aof)的方式

1、snapshotting快照方式持久化

该持久化默认开启,一次性把redis中全部的数据保存一份存储在硬盘中(备份文件名字默认是dump.rdb),如果数据非常多(10-20G)就不适合频繁进行该持久化操作。
(1)如何开启,默认开启,有自己的触发条件:

注意:屏蔽该触发条件,即可关闭快照方式。
(2)可以设置保存位置,和备份的文件名
备份文件名字默认是dump.rdb,我们也可以自己修改,
可以通过配置文件,来完成修改。

(3)手动发起快照:
两种方式完成手动保存。
方式一:在登录状态:
则直接执行bgsave即可。

方式二 :在没有登录状态
./redis-cli bgsave 手动发起一次快照保存操作

(4)缺点:
由于快照方式是在一定间隔做一次的,所以如果redis意外down掉的话,就会丢失最后一次快照后的所有修改。

2、append-only-file 追加方式持久化AOF

本质:把用户执行的每个“写”指令(添加、修改、删除)都备份到文件中,还原数据的时候就是执行具体写指令而已。

(1)如何开启
appendonly yes //启用 aof 持久化方式
appendfilename appendonly.aof //保存命令的文件(可以指定路径)
打开redis.conf配置文件,进行打开配置。

(2)触发条件
appendfsync always //每次收到写命令就立即强制写入磁盘,最慢的,但是保证完全的持久化,不推荐使用

appendfsync everysec //每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐

appendfsync no //完全依赖 os,性能最好,持久化没保证
打开配置文件进行如下修改。

(3)aof文件的重写:

例如:可以把多个incr指令换为一个set指令
问题:
每个命令重写一次aof,如果某个key操作100次,产生100行记录,aof文件会很大,怎么解决?
比如,当执行多次incr number操作,aof 文件中会保存多次incr number的命令。这样会增大aof文件容量,我们可以对aof文件重写,把里面重复的命令压缩成一条命令。
就比如执行10次incr number 压缩成set number 11
执行重写的命令是:
执行重写可以在登录状态下执行,直接输入bgrewriteaof,也可以在未登录状态下执行,
语法:./bin/redis-cli –a 密码 bgrewriteaof

注意点:如果两种持久化方式都开启,则以aof为准。

很赞哦! ( 2 )

站点信息

  • 建站时间:2020-08-10
  • 文章统计100篇文章
  • 标签管理标签云
  • 统计数据百度统计
  • 微信公众号:扫描二维码,关注我