当前位置:网站首页>PHP uses PHPRedis and Predis
PHP uses PHPRedis and Predis
2022-08-02 01:57:00 【Chon-Wang】
# 前言
点我查看 - Redis 订阅与 Redis Stream 技术
一、 PHP 使用 PHPRedis
PHPRedis 简单介绍:
打开 GitHub - PHPRedis- 由
c写的 php 扩展.- 可以保持
php-fpm到redis的长连接,性能更好.- 任何
PHP版本可用.- 业务复杂,非常依赖
redis时可用PHPRedis.
使用之前, 请确保已成功安装
redis服务及PHP Redis扩展, 并且正常运行PHP.The installation process please greatly on the ha.
1.1 Instantiation connect local service
<?php
# 1. Instantiation to connect local Redis
$obj = new Redis();
$obj->connect('127.0.0.1', 6379);
# $redis_obj->connect('127.0.0.1', 6379); # 短链接
$redis_obj->pconnect('127.0.0.1', 6379); # 长链接
$redis_obj->auth('password'); # 登录验证密码, true|false
$redis_obj->select(0); # 选择 redis 库, 如果不设置, 默认连接 0 数据库, 默认共 16 个库
$redis_obj->close(); # 断开连接, 释放资源
1.2 字符串(strings) 实例
<?php
# 设置单个键值
$redis_obj->set('is_collect', 1);
# 设置单个键值 - If the database does not exist in the key,则将参数中的字符串值设置为键的值.
$redis_obj->setNx('is_comment', 1);
# 设置多个键值
$redis_obj->mset(['domain'=>'bqhub.com', 'no'=>'京-123456']);
# To obtain a single key values
$is_collect = $redis_obj->get('is_collect');
$is_comment = $redis_obj->get('is_comment');
# 获取多个键值
$site_config = $redis_obj->mGet(['domain', 'no']);
# 删除键
$redis_obj->del('is_collect');
$redis_obj->del(['is_collect', 'is_comment']);
# 重新赋值
$redis_obj->getSet('is_collect', 'open');
1.3 哈希(hashes) 实例
<?php
# 设置单个
$redis_obj->hSet('bqhub', 'domain', 'bqhub.com');
$redis_obj->hSet('bqhub', 'author', 'Chon');
# 设置多个
$redis_obj->hMSet('blog', ['name'=>'BQHUBBlog', 'code'=>'123456']);
# 获取单个
$bqhub_domain = $redis_obj->hGet('bqhub', 'domain'); # bqhub.com
# 获取多个
$bqhub_data = $redis_obj->hMGet('bqhub', ['domain', 'author']);
$blog_data = $redis_obj->hMGet('blog', ['name', 'code']);
# According to the keys for all
$data = $redis_obj->hGetAll('bqhub');
# 获取所有字段名
$keys = $redis_obj->hKeys('bqhub');
# 获取所有值
$vals = $redis_obj->hVals('bqhub');
# 删除
$redis_obj->hDel('bqhub', 'domain');
1.4 列表(lists) 实例
<?php
# 左侧插入(列表不存在则创建)
$redis_obj->lPush('left_list_key', 'l1', 'l2', 'l3', 'l4');
# 左侧插入(列表不存在, 则没有操作)
$redis_obj->lPushx('left_list_key', 'l11');
# 右侧插入(列表不存在则创建)
$redis_obj->rPush('right_list_key', 'r1', 'r2', 'r3', 'r4');
# 右侧插入(列表不存在, 则没有操作)
$redis_obj->rPushx('right_list_key', 'r11');
# 查询列表 - 根据索引下标
$list = $redis_obj->lRange('left_list_key', 0 ,3);
# 查询单个 - 根据索引下标
$index = $redis_obj->lIndex('left_list_key', 2);
# 左侧第一个元素弹出
$redis_obj->lPop('left_list_key');
# 左侧第一个元素弹出, 如果列表为空, 则等待超时停止或超时内发现元素后弹出
$redis_obj->blPop('left_list_key', 3);
# 右侧第一个元素弹出
$redis_obj->rPop('right_list_key');
# 右侧第一个元素弹出, 如果列表为空, 则等待超时停止或超时内发现元素后弹出
$redis_obj->brPop('right_list_key', 3);
# 删除某数量的元素, # 大于0-从左往右数; 小于0-从右往左数; 等于0 - 删除所有
$redis_obj->lRem('left_list_key', 'l2', 3);
# 保留某范围内的元素 - 根据索引
$redis_obj->lTrim('left_list_key', 0, 2);
# 替换某索引的值
$redis_obj->lSet('left_list_key', 2, 'v22');
# 获取列表的长度
$redis_obj->lLen('left_list_key');
1.5 无序集合(sets) 实例
<?php
# 新增
$redis_obj->sAdd('set_key', 'set_value1', 'set_value2', 'set_value3');
$redis_obj->sAddArray('set_key_array', ['a_1', 'a_2', 'a_3']);
# 查询
$set_key = $redis_obj->sMembers('set_key_array');
# 删除
$redis_obj->sRem('set_key', 'set_value1', 'set_value2');
# To judge whether the values in the list
$is_member = $redis_obj->sIsMember('set_key', 'set_value3');
# Occasionally removes a and returns the value
$pop_value = $redis_obj->sPop('set_key_array');
# Obtains a random and return the value
$rand_value = $redis_obj->sRandMember('set_key_array');
# 差集 - 只获取第一个集合与后续集合之间的差集
$s_diff = $redis_obj->sDiff('set_key_array', 'set_key');
# 交集 - 返回所有集合间的交集
$s_inter = $redis_obj->sInter('set_key_array', 'set_key');
# 并集 - 返回所有集合间的并集
$union = $redis_obj->sUnion('set_key_array', 'set_key');
1.6 有序集合(Sorted Set) 实例
<?php
# 设置
$redis_obj->zAdd('z_set_1', 90, '语文', 108, '数学', 92, '英语');
# 查询 - According to the value to obtain the score
$score = $redis_obj->zScore('z_set_1', '语文');
# 查询 - 从小到大 - 根据 下标排序, true(可选): 是否显示分数(例: 获取第1名到第5名)
$z_range = $redis_obj->zRange('z_set_1', 0, 1, true);
# 查询 - 从大到小 - 根据 下标排序, true(可选): 是否显示分数
$z_rev_range = $redis_obj->zRevRange('z_set_1', 0, 1, true);
# 查询 - 从小到大 - 根据 分数 查询, withscores(可选): 显示分数; limit(可选): 分页
$z_range_score = $redis_obj->zRangeByScore('z_set_1', 60, 100, array('withscores' => TRUE, 'limit'=>array(0,2)));
# 查询 - 从大到小 - 根据 分数 查询, withscores(可选): 显示分数; limit(可选): 分页
$z_rev_range_score = $redis_obj->zRevRangeByScore('z_set_1', 120, 90, array('withscores' => TRUE, 'limit'=>array(0,2)));
# 查询排名 - 从小到大 - 根据值
$z_rank = $redis_obj->zRank('z_set_1', '数学');
# 查询排名 - 从大到小 - 根据值
$z_rev_rank = $redis_obj->zRevRank('z_set_1', '数学');
# The total number of query element
$z_card = $redis_obj->zCard('z_set_1');
# Query interval number
$z_count = $redis_obj->zCount('z_set_1', 90, 100);
# 移除 - 移除 count A maximum element
$redis_obj->zPopMax('z_set_1', 2);
# 移除 - 移除 count A minimum element
$redis_obj->zPopMin('z_set_1', 3);
# 移除 - 根据元素值
$z_rem = $redis_obj->zRem('z_set_1', '数学');
# 移除 - 根据索引范围
$redis_obj->zRemRangeByRank('z_set_1', 0, 2);
# 移除 - According to the score range
$redis_obj->zRemRangeByScore('z_set_1', 0, 60);
# 加法
$redis_obj->zIncrBy('z_set_1', '10', '数学');
1.7 服务操作
<?php
# 查看状态
$redis_obj->info();
# 获取当前数据库中 键 的个数
$size = $redis_obj->dbSize();
# 清空所有数据库
$redis_obj->flushAll();
# 清空当前数据库
$redis_obj->flushDB();
# rdb - save 保存
$redis_obj->save();
# rdb - bgsave 保存
$redis_obj->bgsave();
# 监视一个或多个 key,如果在事务执行之前,相关 key 被其他命令所改动,则事务将被打断不执行
$redis_obj->watch('collect_num');
# 开启事务
$redis_obj->multi(Redis::MULTI);
# 执行一些操作
# 执行事务块内的所有命令
$redis_obj->exec();
# 取消事务
$redis_obj->discard();
# 开启管道, A lot of orders,One-time preparation、执行、返回
$redis_obj->multi(Redis::PIPELINE);
# Same is to perform 管道命令
$redis_obj->exec();
二、 PHP 使用 Predis
Predis:
由
phpWriting tool library.
composer即可安装.
PHP5.3.2Above versions available.Simple application scenario when available
Predis.
2.1 Instantiation connect local service
<?php
# composer 引入 predis 后, Direct load automatically
require('./vendor/autoload.php');
use Predis\Client;
# 1. 连接IP、端口、To use the database of the serial number(默认 16 个数据库)
$server = array('host'=>'127.0.0.1', 'port'=>'6379', 'database'=>1);
$predis_obj = new Client($server);
2.2 字符串(strings) 实例
<?php
# 设置单个值
$predis_obj->set('is_collect', 'YES');
# 设置单个键值 - If the database does not exist in the key,则将参数中的字符串值设置为键的值
$predis_obj->setnx('is_comment', 1);
# 设置多个键值
$predis_obj->mset(['domain'=>'bqhub.com', 'no'=>'京-123456']);
# To obtain a single key values
$is_collect = $predis_obj->get('is_collect');
# 获取多个值 - 根据键
$site_config = $predis_obj->mget(['domain', 'no', 'is_collect']);
# 删除键
$predis_obj->del('is_collect');
$predis_obj->del(['is_collect', 'domain']);
# 重新赋值
$predis_obj->getset('is_collect', 'NO');
2.3 哈希(hashes) 实例
<?php
# 设置单个
$predis_obj->hset('bqhub', 'domain', 'bqhub.com');
$predis_obj->hset('bqhub', 'author', 'Chon');
# 设置多个
$predis_obj->hmset('blog', ['name'=>'BQHUBBlog', 'code'=>'123456']);
# 获取单个
$domain = $predis_obj->hget('bqhub', 'domain'); # bqhub.com
# 获取多个
$bqhub_data = $predis_obj->hmget('bqhub', ['domain', 'author']);
$blog_data = $predis_obj->hmget('blog', ['name', 'code']);
# According to the keys for all
$data = $predis_obj->hgetall('bqhub');
# 获取所有字段名
$keys = $predis_obj->hkeys('bqhub');
# 获取所有值
$values = $predis_obj->hvals('bqhub');
# 删除
$predis_obj->hdel('bqhub', 'domain');
2.4 列表(lists) 实例
<?php
# 左侧插入(列表不存在则创建)
$predis_obj->lpush('left_list_key', ['l1', 'l2', 'l3', 'l4']);
# 左侧插入(列表不存在, 则没有操作)
$predis_obj->lpushx('left_list_key', ['l1', 'l2', 'l3', 'l4']);
# 右侧插入(列表不存在则创建)
$predis_obj->rpush('right_list_key', ['r1', 'r2', 'r3', 'r4']);
# 右侧插入(列表不存在, 则没有操作)
$predis_obj->rpushx('left_list_key', ['r1', 'r2', 'r3', 'r4']);
# 查询列表 - 根据索引下标
$list = $predis_obj->lrange('left_list_key', 0, 2);
# 查询单个 - 根据索引下标
$index = $predis_obj->lindex('left_list_key', 2);
# 左侧第一个元素弹出
$predis_obj->lpop('left_list_key');
# 左侧第一个元素弹出, 如果列表为空, 则等待超时停止或超时内发现元素后弹出
$predis_obj->blpop('left_list_key', 3);
# 右侧第一个元素弹出
$predis_obj->rpop('right_list_key');
# 右侧第一个元素弹出, 如果列表为空, 则等待超时停止或超时内发现元素后弹出
$predis_obj->brpop('right_list_key', 3);
# 删除某数量的元素, # 大于0-从左往右数; 小于0-从右往左数; 等于0 - 删除所有
$predis_obj->lrem('left_list_key', 3, 'l2');
# 保留某范围内的元素 - 根据索引
$predis_obj->ltrim('left_list_key', 0, 2);
# 替换某索引的值
$predis_obj->lset('left_list_key', 2, 'l22');
# 获取列表的长度
$len = $predis_obj->llen('left_list_key');
2.5 无序集合(sets) 实例
<?php
# 新增
$predis_obj->sadd('set_key', ['set_v1', 'set_v2', 'set_v3', 'set_v4']);
$predis_obj->sadd('set_key_1', ['set_1', 'set_2', 'set_3', 'set_4']);
# 查询
$set_key = $predis_obj->smembers('set_key');
# 删除
$predis_obj->srem('set_key', 'set_v3');
# To judge whether the values in the list
$is_member = $predis_obj->sismember('set_key', 'set_v2');
# Occasionally removes a and returns the value
$pop_value = $predis_obj->spop('set_key');
# Obtains a random and return the value
$rand_value = $predis_obj->srandmember('set_key');
# 差集 - 只获取第一个集合与后续集合之间的差集
$s_diff = $predis_obj->sdiff(['set_key', 'set_key_1']);
$s_store_diff = $predis_obj->sdiffstore('new_set_key', ['set_key', 'set_key_1']); # To keep difference set new collection
# 交集 - 返回所有集合间的交集
$s_inter = $predis_obj->sinter(['set_key', 'set_key_1']);
$s_store_inter = $predis_obj->sinterstore('new_set_key', ['set_key', 'set_key_1']); # Intersection save to a new set
# 并集 - 返回所有集合间的并集
$s_union = $predis_obj->sunion(['set_key', 'set_key_1']);
$s_store_union = $predis_obj->sunionstore('new_set_key', ['set_key', 'set_key_1']); # To keep and set new collection
2.6 有序集合(Sorted Set) 实例
<?php
# 设置
$predis_obj->zadd('z_set', ['语文'=>102, '政治'=>90, '数学'=>113, '英文'=>89]);
# 查询 - According to the value to obtain the score
$score = $predis_obj->zscore('z_set', '语文');
# 查询 - 从小到大 - 根据 下标排序, withscores(可选): 是否显示分数(例: 获取第1名到第5名)
$z_range = $predis_obj->zrange('z_set', 0, 2, 'withscores');
# 查询 - 从大到小 - 根据 下标排序, withscores(可选): 是否显示分数
$z_range = $predis_obj->zrevrange('z_set', 0, 2, 'withscores');
# 查询 - 从小到大 - 根据 分数 查询, withscores(可选): 显示分数; limit(可选): 分页
$z_range_score = $predis_obj->zrangebyscore('z_set', 60, 100, ['withscores'=>true, 'limit'=>[0, 1]]);
# 查询 - 从小到大 - 根据 分数 查询, withscores(可选): 显示分数; limit(可选): 分页
$z_rev_range_score = $predis_obj->zrevrangebyscore('z_set', 100, 70, ['withscores'=>true, 'limit'=>[0, 1]]);
# 查询排名 - 从小到大 - 根据值
$z_rank = $predis_obj->zrank('z_set', '数学');
# 查询排名 - 从大到小 - 根据值
$z_rev_rank = $predis_obj->zrevrank('z_set', '英文');
# The total number of query element
$z_card = $predis_obj->zcard('z_set');
# Query interval number
$z_count = $predis_obj->zcount('z_set', 60, 100);
# 移除 - 移除 count A maximum element
$predis_obj->zpopmax('z_set', 3);
# 移除 - 移除 count A minimum element
$predis_obj->zpopmin('z_set', 2);
# 移除 - 根据元素值
$predis_obj->zrem('z_set', '数学');
# 移除 - 根据索引范围
$predis_obj->zremrangebyrank('z_set', 0, 2);
# 移除 - According to the score range
$predis_obj->zremrangebyscore('z_set', 60, 100);
# 加法
$predis_obj->zincrby('z_set', 10, '英文');
2.7 服务操作
<?php
# 查看状态
$info = $predis_obj->info();
# 获取当前数据库中 键 的个数
$size = $predis_obj->dbsize();
# 清空所有数据库
$predis_obj->flushall();
# 清空当前数据库
$predis_obj->flushdb();
# rdb - save 保存
$predis_obj->save();
# rdb - bgsave 保存
$predis_obj->bgsave();
# 监视一个或多个 key,如果在事务执行之前,相关 key 被其他命令所改动,则事务将被打断不执行
$predis_obj->watch('collect_num');
# 开启事务
$predis_obj->multi();
# 执行一些操作
# 执行事务块内的所有命令
$predis_obj->exec();
# 取消事务
$predis_obj->discard();
# 开启管道, A lot of orders,One-time preparation、执行、返回
$predis_obj->pipeline();
# Same is to perform 管道命令
$predis_obj->exec();
点我查看 - Redis 订阅与 Redis Stream 技术
边栏推荐
猜你喜欢

Analysis of volatile principle

用位运算为你的程序加速

【服务器数据恢复】服务器Raid5阵列mdisk磁盘离线的数据恢复案例

Yunhe Enmo: Let the value of the commercial database era continue to prosper in the openGauss ecosystem

3.Bean的作用域与生命周期

Win Go开发包安装配置、GoLand配置

The Paddle Open Source Community Quarterly Report is here, everything you want to know is here

云和恩墨:让商业数据库时代的价值在openGauss生态上持续繁荣

Redis Subscription and Redis Stream

typescript30 - any type
随机推荐
Check if IP or port is blocked
typescript37-class的构造函数实例方法继承(extends)
typescript30 - any type
Anti-oversold and high concurrent deduction scheme for e-commerce inventory system
Constructor instance method inheritance of typescript37-class (extends)
Day115.尚医通:后台用户管理:用户锁定解锁、详情、认证列表审批
Yunhe Enmo: Let the value of the commercial database era continue to prosper in the openGauss ecosystem
6-25漏洞利用-irc后门利用
力扣 1374. 生成每种字符都是奇数个的字符串
Image fusion based on weighted 】 and pyramid image fusion with matlab code
Shell Beginners Final Chapter
大话西游无法登陆解决
AOF重写
Navicat data shows incomplete resolution
LeetCode Brushing Diary: 74. Searching 2D Matrix
Pcie the inbound and outbound
Basic use of typescript34-class
Some insights from 5 years of automated testing experience: UI automation must overcome these 10 pits
LeetCode brushing diary: 53, the largest sub-array and
电子制造仓储条码管理系统解决方案