Redis基础特性及应用练习-php

这篇具有很好参考价值的文章主要介绍了Redis基础特性及应用练习-php。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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 yes

aof文件的保存位置和rdb文件的位置相同,都是dir参数设置的,默认的文件名是appendonly.aof,可以通过appendfilename参数修改

appendfilename appendonly.aof

redis写命令同步的时机

appendfsync always 每次都会执行
appendfsync everysec 默认 每秒执行一次同步操作(推荐,默认)
appendfsync no不主动进行同步,由操作系统来做,30秒一次

宝塔设置:
Redis基础特性及应用练习-php,Redis,redis,php

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 ($i=0;$i<5;$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文件,订阅信息文章来源地址https://www.toymoban.com/news/detail-707231.html

<?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;dbname=my_mysql;port=3306", $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);

到了这里,关于Redis基础特性及应用练习-php的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Redis 高级特性 Redis Stream使用

    Redis Stream 是 Redis 5.0 版本新增加的数据结构。 Stream从字面上看是流类型,但其实从功能上看,应该是Redis对消息队列(MQ,Message Queue)的完善实现。下文称Stream为队列 Stream 出现原因 : Stream的出现是为了给Redis提供完善的消息队列功能 基于Reids的消息队列实现有很多种,例如

    2024年02月05日
    浏览(40)
  • PHP使用Redis实战实录2:Redis扩展方法和PHP连接Redis的多种方案

    PHP使用Redis实战实录系列 PHP使用Redis实战实录1:宝塔环境搭建、6379端口配置、Redis服务启动失败解决方案 PHP使用Redis实战实录2:Redis扩展方法和PHP连接Redis的多种方案 PHP 中使用 Redis 前, 我们需要确保已经安装了 redis 服务及 PHP redis 驱动,且你的机器上能正常使用 PHP: 出现上

    2024年02月15日
    浏览(42)
  • Redis 详解及高级特性

    Redis 是一个基于内存的高性能键值数据库,它支持多种数据结构,包括字符串、列表、集合、有序集合和哈希表等。Redis 将数据存储在内存中,因此拥有非常高的读取和写入性能,适用于需要快速读取和写入数据的应用程序场景。同时,Redis 还支持持久化存储和数据复制等功

    2024年02月04日
    浏览(44)
  • 理解 Redis 新特性:Stream

    该数据结构需要 Redis 5.0.0 + 版本才可用使用 Redis stream 是 Redis 5 引入的一种新的数据结构,它是一个高性能、高可靠性的消息队列,主要用于异步消息处理和流式数据处理。在此之前,想要使用 Redis 实现消息队列,通常可以使用例如:列表,有序集合、发布与订阅 3 种数据结

    2023年04月17日
    浏览(37)
  • Redis学习指南(28)-Redis高性能特性之单线程模型

    Redis是一种高性能、非关系型的内存数据库,被广泛应用于缓存、消息队列、任务队列等场景。Redis之所以能够达到如此高的性能,其中一个重要的原因就是其采用了单线程模型。 Redis使用单线程模型指的是主要的工作线程只有一个,这个线程负责处理所有的客户端请求和对数

    2024年01月24日
    浏览(71)
  • 深入理解 Redis 新特性:Stream

    该数据结构需要 Redis 5.0.0 + 版本才可用使用 Redis stream 是 Redis 5 引入的一种新的数据结构,它是一个高性能、高可靠性的消息队列,主要用于异步消息处理和流式数据处理。在此之前,想要使用 Redis 实现消息队列,通常可以使用例如:列表,有序集合、发布与订阅 3 种数据结

    2023年04月17日
    浏览(36)
  • PHP使用Redis实战实录5:Redis实现消息队列

    PHP使用Redis实战实录系列 PHP使用Redis实战实录1:宝塔环境搭建、6379端口配置、Redis服务启动失败解决方案 PHP使用Redis实战实录2:Redis扩展方法和PHP连接Redis的多种方案 PHP使用Redis实战实录3:数据类型比较、大小限制和性能扩展 PHP使用Redis实战实录4:单例模式和面向过程操作

    2024年02月11日
    浏览(44)
  • 本文通过实例介绍了Redis的基础知识、数据类型、数据结构以及典型应用场景 值得一看!

    作者:禅与计算机程序设计艺术 2017年,Redis是基于MIT许可发布的一个开源的高性能键值数据库,其开发语言为C语言。它提供了多种数据类型(strings、hashes、lists、sets、sorted sets等),分布式支持(可横向扩展),内存存储,持久化功能,事务处理功能等。作为一种高性能的

    2024年02月06日
    浏览(66)
  • Redis 6.0进化之路:关键新特性详解

            随着技术发展的日新月异,Redis作为业界知名的开源内存数据结构存储系统,在不断演进中为开发者带来了众多令人瞩目的新特性。在2020年4月底正式发布的Redis 6.0版本中,一系列重大改进不仅提升了性能和扩展性,更强化了安全性及管理灵活性。本文将深入探讨

    2024年01月18日
    浏览(38)
  • Redis_概述_特性_IO模型

    掌握NoSql数据库的概念和与sql数据库的区别 初步了解Redis内存数据库 了解Redis内存数据库的优点及其原因 掌握Redis的多线程IO模型 学习Redis的安装和配置 Redis 全称 Remote Dictionary Server 远程字典服务! 使用C语言编写,支持网络,可基于内存也可以持久化的日志型,NoSQL开源内存数据库

    2024年02月09日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包