PHP实例讲解使用Redis(php+redis)
mhr18 2024-10-23 11:29 17 浏览 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 过期时间
- 查看过期时间
// $redis->ttl('key名'); // 查看某个key有效期的剩余时间,返回秒数。 // 当 无过期时间 时,返回:-1; // 当 无该key值 时,返回-2;
$redis->ttl('ttltest'); // 查看ttltest剩余过期时间
设置过期时间
Redis::expire('key', second); // 多少秒后过期Redis::expireAt('key', timeStemp); // 到某一个 时间戳(秒) 的时候过期
以上就是PHP使用Redis实例讲解的详细内容
相关推荐
- Docker安装详细步骤及相关环境安装配置
-
最近自己在虚拟机上搭建一个docker,将项目运行在虚拟机中。需要提前准备的工具,FinallShell(远程链接工具),VM(虚拟机-配置网络)、CentOS7(Linux操作系统-在虚拟机上安装)...
- Linux下安装常用软件都有哪些?做了一个汇总列表,你看还缺啥?
-
1.安装列表MySQL5.7.11Java1.8ApacheMaven3.6+tomcat8.5gitRedisNginxpythondocker2.安装mysql1.拷贝mysql安装文件到...
- Nginx安装和使用指南详细讲解(nginx1.20安装)
-
Nginx安装和使用指南安装1.检查并安装所需的依赖软件1).gcc:nginx编译依赖gcc环境安装命令:yuminstallgcc-c++2).pcre:(PerlCompatibleRe...
- docker之安装部署Harbor(docker安装hacs)
-
在现代软件开发和部署环境中,Harbor作为一个企业级的容器镜像仓库,提供了高效、安全的镜像管理解决方案。通过Docker部署Harbor,可以轻松构建私有镜像仓库,满足企业对镜像存储、管理和安全性...
- 成功安装 Magento2.4.3最新版教程「技术干货」
-
外贸独立站设计公司xingbell.com经过多次的反复实验,最新版的magento2.4.3在oneinstack的环境下的详细安装教程如下:一.vps系统:LinuxCentOS7.7.19...
- 【Linux】——从0到1的学习,让你熟练掌握,带你玩转Linu
-
学习Linux并掌握Java环境配置及SpringBoot项目部署是一个系统化的过程,以下是从零开始的详细指南,帮助你逐步掌握这些技能。一、Linux基础入门1.安装Linux系统选择发行版:推荐...
- cent6.5安装gitlab-ce最新版本-11.8.2并配置邮件服务
-
cent6.5安装gitlab-ce最新版本-11.8.2并配置邮件服务(yum选择的,时间不同,版本不同)如果对运维课程感兴趣,可以在b站上搜索我的账号:运维实战课程,可以关注我,学习更多免费的运...
- 时隔三月,参加2020秋招散招,终拿字节跳动后端开发意向书.
-
3个月前头条正式批笔试4道编程题只AC了2道,然后被刷了做了200多道还是太菜了,本来对字节不抱太大希望,毕竟后台竞争太大,而且字节招客户端开发比较多。后来看到有散招免笔试,抱着试一试的心态投了,然而...
- Redisson:Java程序员手中的“魔法锁”
-
Redisson:Java程序员手中的“魔法锁”在这个万物互联的时代,分布式系统已经成为主流。然而,随着系统的扩展,共享资源的争夺成为了一个棘手的问题。就比如你想在淘宝“秒杀”一款商品,却发现抢的人太...
- 【线上故障复盘】RPC 线程池被打满,1024个线程居然不够用?
-
1.故障背景昨天晚上,我刚到家里打开公司群,就看见群里有人讨论:线上环境出现大量RPC请求报错,异常原因:被线程池拒绝。虽然异常量很大,但是异常服务非核心服务,属于系统旁路,服务于数据核对任务,即使...
- 小红书取消大小周,有人不高兴了!
-
小红书宣布五一节假日之后,取消大小周,恢复为正常的双休,乍一看工作时长变少,按道理来说大家应该都会很开心,毕竟上班时间缩短了,但是还是有一些小红书的朋友高兴不起来,心情很复杂。因为没有了大小周,以前...
- 延迟任务的多种实现方案(延迟机制)
-
场景订单超时自动取消:延迟任务典型的使用场景是订单超时自动取消。功能精确的时间控制:延时任务的时间控制要尽量准确。可靠性:延时任务的处理要是可靠的,确保所有任务最终都能被执行。这通常要求延时任务的方案...
- 百度java面试真题(java面试题下载)
-
1、SpingBoot也有定时任务?是什么注解?在SpringBoot中使用定时任务主要有两种不同的方式,一个就是使用Spring中的@Scheduled注解,另一个则是使用第三方框架Q...
- 回归基础:访问 Kubernetes Pod(concurrent.futures访问数据库)
-
Kubernetes是一头巨大的野兽。在它开始有用之前,您需要了解许多概念。在这里,学习几种访问集群外pod的方法。Kubernetes是一头巨大的野兽。在它开始有用之前,您需要了解许多不同的...
- Spring 缓存神器 @Cacheable:3 分钟学会优化高频数据访问
-
在互联网应用中,高频数据查询(如商品详情、用户信息)往往成为性能瓶颈。每次请求都触发数据库查询,不仅增加服务器压力,还会导致响应延迟。Spring框架提供的@Cacheable注解,就像给方法加了一...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- Docker安装详细步骤及相关环境安装配置
- Linux下安装常用软件都有哪些?做了一个汇总列表,你看还缺啥?
- Nginx安装和使用指南详细讲解(nginx1.20安装)
- docker之安装部署Harbor(docker安装hacs)
- 成功安装 Magento2.4.3最新版教程「技术干货」
- 【Linux】——从0到1的学习,让你熟练掌握,带你玩转Linu
- cent6.5安装gitlab-ce最新版本-11.8.2并配置邮件服务
- 时隔三月,参加2020秋招散招,终拿字节跳动后端开发意向书.
- Redisson:Java程序员手中的“魔法锁”
- 【线上故障复盘】RPC 线程池被打满,1024个线程居然不够用?
- 标签列表
-
- oracle位图索引 (63)
- oracle批量插入数据 (62)
- oracle事务隔离级别 (53)
- oracle 空为0 (50)
- oracle主从同步 (55)
- oracle 乐观锁 (51)
- redis 命令 (78)
- php redis (88)
- redis 存储 (66)
- redis 锁 (69)
- 启动 redis (66)
- redis 时间 (56)
- redis 删除 (67)
- redis内存 (57)
- redis并发 (52)
- redis 主从 (69)
- redis 订阅 (51)
- redis 登录 (54)
- redis 面试 (58)
- 阿里 redis (59)
- redis 搭建 (53)
- redis的缓存 (55)
- lua redis (58)
- redis 连接池 (61)
- redis 限流 (51)