wordpress网站名,品传集团网站建设,三室二厅20万全款,上海高端室内设计事务所redis持久化#xff08;persistence#xff09;
redis支持两种方式的持久化#xff0c;可以单独使用或者结合起来使用。
第一种#xff1a;RDB方式#xff08;redis默认的持久化方式#xff09; rdb方式的持久化是通过快照完成的#xff0c;当符合一定条件时redis会自…redis持久化persistence
redis支持两种方式的持久化可以单独使用或者结合起来使用。
第一种RDB方式redis默认的持久化方式 rdb方式的持久化是通过快照完成的当符合一定条件时redis会自动将内存中的所有数据执行快照操作并存储到硬盘上。默认存储在dump.rdb文件中。(文件名在配置文件中dbfilename) redis进行快照的时机在配置文件redis.conf中 save 900 1 //表示900秒内至少一个键被更改则进行快照。
save 300 10 //表示300秒内10条被更改则快照
save 60 10000 //60秒内10000条第二种AOF方式 aof方式的持久化是通过日志文件的方式。默认情况下redis没有开启aof可以通过参数appendonly参数开启。 appendonly yesaof文件的保存位置和rdb文件的位置相同都是dir参数设置的默认的文件名是appendonly.aof可以通过appendfilename参数修改 appendfilename appendonly.aofredis写命令同步的时机
appendfsync always 每次都会执行
appendfsync everysec 默认 每秒执行一次同步操作推荐默认
appendfsync no不主动进行同步由操作系统来做30秒一次宝塔设置
redis中键的生存时间expire
class Myredis{protected $redis;public function __construct() {//实例化Redis类$redis new Redis();//选择指定的redis数据库连接默认端口号为6379$redis-connect(127.0.0.1,6379);$this-redis $redis;}public function expire(string $name,int $expire){$this-redis-expire($name, $expire);// $redis-ttl(‘foo’); //返回有效期值1s// $redis-expire(‘foo’); //取消expire行为}
}
$redis new Myredis();
$redis-expire(name,10); //单位/秒redis的事务transaction public function transaction(){//Redis 事务的本质是一组命令的集合。事务支持一次执行多个命令一个事务中所有命令都会被序列化。在事务执行过程会按照顺序串行化执行队列中的命令其他客户端提交的命令请求不会插入到事务执行命令序列中。/**//1 Redis事务没有隔离级别$this-redis-multi();$this-redis-decrby(number,10);//发送 EXEC 命令前被放入队列缓存并不会被实际执行也就不存在事务内的查询要看到事务里的更新事务外查询不能看到。if($this-redis-get(number) 0){return $this-redis-discard();}$this-redis-incrby(number2,10);$this-redis-exec(); //number:-10, number2:10*//**//2 Redis不保证原子性//Redis中单条命令是原子性执行的但事务不保证原子性且没有回滚。事务中任意命令执行失败其余的命令仍会被执行。$this-redis-multi();$this-redis-decrby(number,10);$this-redis-incrby(number2,10,21,321); //err$this-redis-incrby(number3,10);$this-redis-exec(); //number:-10, number3: 10//Redis中单条命令是原子性执行的但事务不保证原子性且没有回滚。*/// Watch 命令用于监视一个(或多个) key 如果在事务执行之前这个(或这些) key 被其他命令所改动那么事务将被打断$this-redis-watch(number);sleep(10); //期间改掉number下面的命令都不会执行$this-redis-multi();$this-redis-set(favorite_fruit,cherry);$this-redis-incrBy(number,3);$this-redis-exec();}$redis-transaction();发布/订阅
//调用
public function Publish_Subscribe(){//通过订阅/发布添加数据库数据。 tb_people表$channelName tb_people;//向指定频道发送消息try {$redis new Redis();$redis-connect(127.0.0.1, 6379);for ($i0;$i5;$i){$data array(name key.$i);$ret $redis-publish($channelName, json_encode($data));print_r($ret);}} catch (Exception $e){echo $e-getMessage();}
}xxxx.php:单独起个php文件订阅信息
?php
//设置php脚本执行时间
set_time_limit(0);
//设置socket连接超时时间
ini_set(default_socket_timeout, -1);$servername localhost;
$username root;
$password root;
try {$conn new PDO(mysql:host$servername;dbnamemy_mysql;port3306, $username, $password);// echo 连接成功;
}catch(PDOException $e){echo $e-getMessage();
}//声明测试频道名称
$channelName tb_people;
try {$redis new Redis();//建立一个长链接$redis-pconnect(127.0.0.1, 6379);//阻塞获取消息$redis-subscribe(array($channelName), function ($redis, $chan, $msg) use($conn){// echo channel:.$chan.,message:.$msg.\n;$arr_msg json_decode($msg,true);$sqlquery INSERT INTO tb_people (name) VALUES (.$arr_msg[name].);$conn-query($sqlquery);echo 成功;});
} catch (Exception $e){echo $e-getMessage();
}
mysql_close($con);