百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

PHP实例讲解使用Redis(php+redis)

mhr18 2024-10-23 11:29 25 浏览 0 评论

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key- Value数据库,并提供多种语言的API。Redis支持的数据类型有 String(字符串), List(列表), Hash(字典), Set(集合), Sorted Set(有序集合);Redis默认端口6379。


【点击领取】150粉丝福利,免费获取PHP进阶架构资料


1. 连接

$redis = new Redis();  // 实例化$redis->connect('127.0.0.1', 6379);  // 连接$redis->auth('redis密码');   // 没密码的redis可忽略此步骤

2. 数据类型

2-1 string字符串

// 存储或更改$redis->set('test', 'aaa');// 获取值$redis->get('test');   // aaa

2-2 list列表

方法中的l代表list操作

存储

$redis->lpush('list', 'a');    // 从左边加入$redis->lpush('list', 'b');$redis->lpush('list', 'c');        

 

$redis->rpush('list', 'd');    // 从右边加入$redis->lset('list', 2, 'e');// 设置或更改列表指定位置的值,成功返回1,失败返回错误信息

删除

$redis->lpop('list');      // 删除左边第一个$redis->rpop('list');      // 删除右边第一个// $redis->lrem('list名', '值', num); // 根据值删除元素,第二个参数是要删除的值(值为这个值的元素要被删除),// 第三个参数 num 表示:从哪开始删、删几个,

    //num>0 从表头往表尾删,删除num个结束;

    //num<0 从表尾往表头删,删除 |num| 个;

    //num=0 移除表中所有值为'b'的元素

    $redis->lrem('list', 'b', 2);


获取,返回数组

$redis->lrange('list', 0, -1);  // 返回一个数组。存储在key中的列表里指定范围的元素, 

    // 第一个参数是列表名

    // 第二个参数是起始位下标,

    // 第三个是结束位下标(包含结束位元素)。

    // 负数代表倒数,-1代表倒数第一个;

    // 如果起始大于结束返回空,结束大于实际长度,返回至最后一个元素。$redis->lgetrange('list', 0, 2);// 获取列表指定区间的值,同上$redis->ltrim('list', 0, 3);   // 截取并保留列表指定区间的值,其余值删除。

    // 成功返回1,失败返回错误信息。负数代表倒数$redis->lsize('list');         // 获取列表的长度$redis->lget('list', 2)        // 获取列表指定位置的值$redis->lindex('list', 2);     // 获取列表指定位置的值

2-3 hash字典

一个string类型的field和value的映射表,特别适合用于存储对象。每个 hash 可以存储 2的32次方 - 1 键值对(40多亿)

hash表相当于 redis存储 key => value  中的key, 表内容相当于 value

方法中h代表hash操作

存储

// $redis->hset('hash表', key, value);  

    // 如果hash表不存在,创建一个该hash表,如果不存在该key则设置成功,返回true,

    // 如果存在,则替换掉原来的值,返回false,失败返回false

    // 第一个参数是字典名

    $redis->hset('hashtest', 'a', 'aaa');   // 返回true

    $redis->hset('hashtest', 'a', 'bbb');  // 返回false,a的值改为bbb

    $redis->hset('hashtest', 'b', 'bbb');  // 返回true,增加b,值为bb$redis->hmset('hashtest', [1 => 1, 2 => 2, 3 => 3]);   // 批量赋值,       $redis->hincrby('hashtest', '1', 1);   // hash表中的key对应的值自增1(整数),

    // 第一个参数字典名

    // 第二个参数是key名,

    // 第三个参数是自增的幅度。如果表中不存在该key,则自动添加该key,并设置值为自增幅度$redis->hincrbyfloat('hashtest', '2', 1.5);        // hash表中key自增

获取

$redis->hget('hash表', key);        // 获取某个key对应的值

    $redis->hget('hashtest', 'a'); // 获取hashtest中a的值$redis->hkeys('hashtest');     // 获取hash表中的所有的keys(键名),返回一个数组   $redis->hvals('hashtest'); // 获取hash表中的所有的values(值),顺序随机,返回一个数组$redis->hgetall('hashtest');   // 获取hash表中所有的键值对,顺序随机,返回一个数组$redis->hlen('hashtest');      // 获取hash表中key的数量   $redis->hmget('hashtest', [1, 2, 3]); // 批量获取多个key对应的value,第二个参数是keyArr

 

$redis->hexists('hashtest', 'b');      // 判断hash表中是否存在该key

删除

$redis->hdel('hashtest', 'a'); 

    // 删除hash表中的一个key,成功返回true,

    // 如果表不存在或key不存在返回false

2-4 set集合

Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。

集合中最大的成员数为 2的32次方 - 1 (4294967295, 每个集合可存储40多亿个成员)。

方法中的s代表set操作

添加

// $redis->sadd('set集合', '值'); // 往settest中加入一个值,成功,返回添加的个数,失败返回0。// 第一个参数是set集合名// 第二个参数是往该集合插入新值,即:往value中插入新值

    $redis->sadd('settest', 'a');  // 1

    $redis->sadd('settest', 'b');  // 1

    $redis->sadd('settest', 'a');  // 0$redis->sadd('settest', ['c', 'd', 'e']);  // 一次添加多个值

获取

$redis->smembers('settest'); // 获取集合中所有的元素$redis->sismember('settest', 'b'); // 判断元素是否是set成员$redis->scard('settest'); // 查看集合中元素的数量$redis->sinter('settest', 'settest2'); // 返回两个集合的交集$redis->sinterstore('settest3', 'settest', 'settest2'); // 将settest和settest2的交集放到集合settest3中$redis->sunion('settest', 'settest2'); // 返回两个集合的并集$redis->sunionstore('settest4', 'settest', 'settest2'); // 将settest和settest2的并集放到集合settest4中$redis->sdiff('settest', 'settest2'); // 返回两个集合的差集$redis->sdiffstore('settest5', 'settest', 'settest2'); // 将settest和settest2的差集放到集合settest5中


删除

$redis->srem('settest', 'a'); // 删除集合中的某个值,$redis->srem('settest', 'a', 'b'); // 删除多个值 $redis->spop('settest'); // 移除集合中一个随机的元素,并返回该元素

2-5. sorted set有序集合

Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

有序集合的成员是唯一的,但分数(score)却可以重复。

集合中最大的成员数为 2的32次方 - 1 (4294967295, 每个集合可存储40多亿个成员)。

方法中的z代表有序集合操作

添加或更新

// $redis->zadd('有序集合名', 分数, 值);   // 向有序集合ztest中一个值,分数值可以是整数值或双精度浮点数。// 执行zadd时,如果不存在,则创建一个新的有序集合;// 如果ztest存在但不是有序集类型时,返回一个错误。

    $redis->zadd('ztest', 1, 'a'); 

    $redis->zadd('ztest', 2, 'a'); 

        // 当某元素存在时,更新这个元素的分数,并重新插入该元素,保证元素在正确的位置。

        // 但不算新添加的$redis->zadd('ztest', 分数1, 值1, 分数2, 值2);   // 向有序集合插入多个值

    $redis->zadd('ztest', 2, 'b', 3, 'c', 4, 'd'); 

 

$redis->zincrby('set', 2, 'c');  // 指定的值 c 增加 2

获取

// $redis->zrange('z集合', 起始位, 结束位, 布尔值); // 获取指定区间的有序集合。返回数组。分数从小到大。// 第一个参数: 有序集合名// 第二个参数:起始位置,// 第三个参数:结束位置(包含该位置),负数代表倒数第几个,// 第四个参数:可选参数,布尔值,是否带有分数,默认false

    $redis->zrange('ztest', 0, 1);     // ['a', 'b']   按分数排序,但是不带分数

    $redis->zrange('ztest', 0, 1, true);// ['a' => 2, 'b' => 2] 按分数排序,并且携带分数 ['元素' => '分数']$redis->zrevrange('zset', 1, 2);   // 获取指定区间的有序集合。返回数组。分数从大到小。$redis->zscore('ztest', 'a');  // 获取指定元素的分数$redis->zcard('zset');         // 获取存储元素的个数$redis->zcount('zset', 2, 5);  // 分数介于 2~5 的元素的个数$redis->zrangebyscore('zset', 2, 3);   // 返回分数介于 2~3 的元素,不带分数,显示方式同zrange$redis->zrangebyscore('zset', 2, 3, ['withscores' => true]); // 返回分数介于2~3的元素,并带分数显示,显示方式同zrange

删除

$redis->zrem('zset', 'c'); // 删除指定成员$redis->zremrangebyscore('set', 2, 3); // 移除分数介于2~3的元素,返回删除的个数

3. 其他常用方法

3-1 查找相关key

// 按条件查出对应的key(键),支持字符串拼接  (返回值是一个数组,即使没查出数据也会返回空数组)     // *代表任意字符任意长度, ?任意字符一个长度$redis->keys('A');  // 找出等于 A 的那个 键$redis->keys('a*');  // 找出以 a 开头,后面为任意值的 键,$redis->keys('*b*');  // 找出链接中间包含 b 的 键$redis->keys('c??');   // 找出长度为3,且第一个字符为c的 键$a = a;$redis->keys($a . '*');// 使用keys后可以使用for循环加 get() 来获取相关keys对应的值

3-2 过期时间

  1. 查看过期时间
// $redis->ttl('key名');        // 查看某个key有效期的剩余时间,返回秒数。  // 当 无过期时间 时,返回:-1; // 当 无该key值 时,返回-2; 

    $redis->ttl('ttltest');    // 查看ttltest剩余过期时间

设置过期时间

Redis::expire('key', second);  // 多少秒后过期Redis::expireAt('key', timeStemp);  // 到某一个 时间戳(秒) 的时候过期

以上就是PHP使用Redis实例讲解的详细内容

相关推荐

【预警通报】关于WebLogic存在远程代码执行高危漏洞的预警通报

近日,Oracle官方发布了2021年1月关键补丁更新公告CPU(CriticalPatchUpdate),共修复了包括CVE-2021-2109(WeblogicServer远程代码执行漏洞)...

医院信息系统突发应急演练记录(医院信息化应急演练)

信息系统突发事件应急预案演练记录演练内容信息系统突发事件应急预案演练参与人员信息科参与科室:全院各部门日期xxxx-xx-xx时间20:00至24:00地点信息科记录:xxx1、...

一文掌握怎么利用Shell+Python实现完美版的多数据源备份程序

简介:在当今数字化时代,无论是企业还是个人,数据的安全性和业务的连续性都是至关重要的。数据一旦丢失,可能会造成无法估量的损失。因此,如何有效地对分布在不同位置的数据进行备份,尤其是异地备份,成为了一个...

docker搭建系统环境(docker搭建centos)

Docker安装(CentOS7)1.卸载旧版Docker#检查已安装版本yumlistinstalled|grepdocker#卸载旧版本yumremove-ydocker.x...

基础篇:数据库 SQL 入门教程(sql数据库入门书籍推荐)

SQL介绍什么是SQLSQL指结构化查询语言,是用于访问和处理数据库的标准的计算机语言。它使我们有能力访问数据库,可与多种数据库程序协同工作,如MSAccess、DB2、Informix、M...

Java21杀手级新特性!3行代码性能翻倍

导语某券商系统用这招,交易延迟从12ms降到0.8ms!本文揭秘Oracle官方未公开的Record模式匹配+虚拟线程深度优化+向量API神操作,代码量直降70%!一、Record模式匹配(代码量↓8...

一文读懂JDK21的虚拟线程(java虚拟线程)

概述JDK21已于2023年9月19日发布,作为Oracle标准Java实现的一个LTS版本发布,发布了15想新特性,其中虚拟线程呼声较高。虚拟线程是JDK21中引入的一项重要特性,它是一种轻量级的...

效率!MacOS下超级好用的Linux虚拟工具:Lima

对于MacOS用户来说,搭建Linux虚拟环境一直是件让人头疼的事。无论是VirtualBox还是商业的VMware,都显得过于笨重且配置复杂。今天,我们要介绍一个轻巧方便的纯命令行Linux虚拟工具...

所谓SaaS(所谓三维目标一般都应包括)

2010年前后,一个科技媒体的主编写一些关于云计算的概念性问题,就可以作为头版头条了。那时候的云计算,更多的还停留在一些概念性的问题上。而基于云计算而生的SaaS更是“养在深闺人未识”,一度成为被IT...

ORA-00600 「25027」 「x」报错(报错0xc0000001)

问题现象:在用到LOB大对象的业务中,进行数据的插入,失败了,在报警文件中报错:ORA-00600:内部错误代码,参数:[25027],[10],[0],[],[],[],[],[...

安卓7源码编译(安卓源码编译环境lunch失败,uname命令找不到)

前面已经下载好源码了,接下来是下载手机对应的二进制驱动执行编译源码命令下载厂商驱动https://developers.google.com/android/drivers?hl=zh-cn搜索NGI...

编译安卓源码(编译安卓源码 电脑配置)

前面已经下载好源码了,接下来是下载手机对应的二进制驱动执行编译源码命令下载厂商驱动https://developers.google.com/android/drivers?hl=zh-cn搜索NGI...

360 Vulcan Team首战告捷 以17.5万美金强势领跑2019“天府杯“

2019年11月16日,由360集团、百度、腾讯、阿里巴巴、清华大学与中科院等多家企业和研究机构在成都联合主办了2019“天府杯”国际网络安全大赛暨2019天府国际网络安全高峰论坛。而开幕当日最激荡人...

Syslog 日志分析与异常检测技巧(syslog发送日志配置)

系统日志包含有助于分析网络设备整体运行状况的重要信息。然而,理解并从中提取有效数据往往颇具挑战。本文将详解从基础命令行工具到专业日志管理软件的全流程分析技巧,助你高效挖掘Syslog日志价值。Gr...

从Oracle演进看数据库技术的发展(从oracle演进看数据库技术的发展的过程)

数据库技术发展本质上是应用需求驱动与基础架构演进的双向奔赴,如何分析其技术发展的脉络和方向?考虑到oracle数据库仍然是这个领域的王者,以其为例,管中窥豹,对其从Oracle8i到23ai版本的核...

取消回复欢迎 发表评论: