ThinkPHP5中怎么使用redis
在IT行业这个发展更新速度很快的行业,只有不停止的学习,才不会被行业所淘汰。如果你是数据库学习者,那么本文《ThinkPHP5中怎么使用redis》就很适合你!本篇内容主要包括##content_title##,希望对大家的知识积累有所帮助,助力实战开发!
前提:因为本文主要围绕着在thinkPHP5中使用redis的,所以关于redis的安装就不特意说明了,不过在这稍微提醒一下,安装完redis后务必要开启php.ini扩展,否则还是无法使用redis的。
配置
1.会用ThinkPHP5的同学们都知道,TinkPHP5中封装了缓存类,我们只需要在/application/congfig.php中的cache中填入缓存配置项就可以使用了(如下所示)。

2.从/thinkphp/library/think/cache/driver/Redis.php文件可知这里封装的redis缓存只能使用redis的string基本类型,如果要使用哈希或队列等复合数据类型的话是不行的。
看缓存类/thinkphp/library/think/cache/Driver.php会发现handler方法会返回句柄,所以我们只要在我们使用redis的地方获得这个句柄就可以使用redis的所有数据类型了,因此可以在/thinkphp/library/think/Cache.php中添加获取句柄方法getHandler
/**
* 返回句柄对象,可执行其它高级方法
*
* @access public
* @return object
*/
public function handler()
{
return $this->handler;
} /*
* 获取句柄
* @param
*/
public static function getHandler()
{
return self::init();
}
redis使用
string(字符串)
基本的类型,一个 key 对应一个 value。
一个string 类型的值最大能存储 512MB
图解:

// 创建数据
$redis->set('key', 'value');// 获取数据
$value = $redis->get('key');
echo $value . PHP_EOL;// 修改数据,与创建数据一致,即覆盖数据
$redis->set('key', 'value2');
echo $redis->get('key') . PHP_EOL;// 追加数据
$redis->append('key', '_value2');
echo $redis->get('key') . PHP_EOL;// 删除数据
$redis->del('key');
// $redis->delete('key');
var_dump($redis->get('key'));// 创建数据,带有效期
$redis->set('timeout_key', 'timeout_value', 5);
$redis->setex('timeout_key', 5, 'timeout_value');
// 获取数据的有效期
echo $redis->ttl('timeout_key') . PHP_EOL;// 判断是否已经写入,未写入则写入
$redis->set('unique_key', 'unique_value');
if (!$redis->setnx('unique_key', 'unique_value')) {
echo $redis->get('unique_key') . PHP_EOL;
}// 批量创建
$multi = ['key1' => 'value1', 'key2' => 'value2', 'key3' => 'value3'];
$redis->mset($multi);// 批量获取
$result = $redis->mget(array_keys($multi));
var_dump($result);Hash(哈希)
hash 是一个键值(key=>value)对集合;是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
每个 hash 可以存储 2^32 -1 键值对(40多亿)
图解 :

// 创建 hash 表
// 向名字叫 'hash' 的 hash表 中添加元素 ['key1' => 'val1']
$redis->hSet('hash', 'key1', 'val1');// 获取 hash表 中键名是 key1 的值
echo $redis->hGet('hash', 'key1') . PHP_EOL;// 获取 hash表的元素个数
echo $redis->hLen('hash') . PHP_EOL;// 获取 hash表 中所有的键
$keys = $redis->hKeys('hash');
var_dump($keys);// 获取 hash表 中所有的值
$vals = $redis->hVals('hash');
var_dump($vals);// 获取 hash表 中所有的键值对
// 不推荐使用这种方法获取全部数据,会导致服务器执行超时,推荐方法后边会详细介绍
// $all = $redis->hGetAll('hash');
// var_dump($all);// 判断 hash 表中是否存在键名是 key2 的元素
$bool = $redis->hExists('hash', 'key2');
echo $bool ? '存在' : '不存在' . PHP_EOL;// 批量添加元素
$redis->hMset('hash', ['key2' => 'val2', 'key3' => 'val3']);// 批量获取元素
$hashes = $redis->hMGet('hash', ['key1', 'key2', 'key3']);
var_dump($hashes);// 删除 hash表
$redis->del('hash');List(列表)
列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。List类型通常被用于消息队列服务来实现多个程序间的消息交互。一个列表最多能够存储40多亿个元素,即2的32次方减1(4294967295)。
图解 :

// 向队列左侧加入元素
$redis->lPush('lists', 'X');
$redis->lPush('lists', 'X');
// 向队列右侧加入元素
$redis->rPush('lists', 'Z');// 将索引为1的数据修改为 Y
$redis->lSet('lists', 1, 'Y');// 获取 list 长度
$length = $redis->lLen('lists');
echo $length;// 遍历 list
$lists = $redis->lRange('lists', 0, $length - 1);
dump($lists);// 从左侧出队一个元素(获取并删除)
$x = $redis->lPop('lists');
echo $x . PHP_EOL;
// 从右侧出队一个元素(获取并删除)
$z = $redis->rPop('lists');
echo $z . PHP_EOL;// 获取左侧第一个元素
$y = $redis->lIndex('lists', 0);
echo $y . PHP_EOL;// 删除队列
$redis->del('lists');Set(集合)
Redis的Set是string类型的无序集合。
和列表一样,在执行插入和删除和判断是否存在某元素时,效率是很高的。
集合最大的优势在于可以进行交集并集差集操作。
Set可包含的最大元素数量是4294967295(40多亿)。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
图解 :

// 创建集合
$redis->sAdd('sets', 'value1', 'value2');
// 以数组形式创建集合
$redis->sAddArray('sets2', ['value1', 'value2', 'value3']);// 取两个集合的并集
$union = $redis->sUnion('sets', 'sets2');
// 取两个集合的差集
$diff = $redis->sDiff('sets', 'sets2');
// 取两个集合的交集
$inter = $redis->sInter('sets', 'sets2');var_dump($union, $diff, $inter);// 获取集合数量
$card = $redis->sCard('sets');
echo $card . PHP_EOL;// 获取集合中全部元素
// 不推荐使用这种方法获取全部数据,会导致服务器执行超时,推荐方法后边会详细介绍
$sets = $redis->sMembers('sets');
var_dump($sets);// 判断元素是否是集合中的成员
$isMember = $redis->sIsMember('sets', 'value2');
var_dump($isMember);// 删除集合中的元素
$redis->sRem('sets', 'value2');
var_dump($redis->sMembers('sets'));// 随机获取一个元素
echo $redis->sRandMember('sets');// 随机获取一个元素并从集合中删除
echo $redis->sPop('sets');// 删除集合
$redis->del('sets', 'sets2');zset(有序集合)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。
redis正是通过分数来为集合中的成员进行从小到大的排序。
// 添加成员
$redis->zAdd('zset', 95, '小明');
$redis->zAdd('zset', 99, '小刚');
$redis->zAdd('zset', 100, '小红');// 统计成员个数
echo $redis->zCard('zset') . PHP_EOL;// 获取某个成员的分数
$score = $redis->zScore('zset', '小明');
echo $score . PHP_EOL;// 获取某个成员的排名
$rank = $redis->zRank('zset', '小明'); // 从低到高排序的名次
$revRank = $redis->zRevRank('zset', '小明'); // 从高到低排序的名次
echo $rank . PHP_EOL;
echo $revRank . PHP_EOL;// 给指定成员增加分数
$redis->zIncrBy('zset', 1, '小明'); // 给小明加一分// 返回指定排名范围的成员
$range = $redis->zRange('zset', 0, 9, true); // 返回分数从低到高排序的前10名及分数
$revRange = $redis-> zRevRange('zset', 0, 9, true); // 返回分数从高到低排序的前10名及分数
var_dump($range);
var_dump($revRange);// 删除成员
$redis->zRem('zet', '小明');// 返回指定分数范围的成员
$rangeByScore = $redis->zRangeByScore('zet', 98, 100); // 返回指定分数范围内从低到高排序的成员
$revRangeByScore = $redis->zRevRangeByScore('zet', 98, 100); // 返回指定分数范围内从高到低排序的成员
var_dump($rangeByScore);
var_dump($revRangeByScore);以上就是《ThinkPHP5中怎么使用redis》的详细内容,更多关于redis,ThinkPHP的资料请关注golang学习网公众号!
mysql使用left join连接出现重复问题怎么解决
- 上一篇
- mysql使用left join连接出现重复问题怎么解决
- 下一篇
- 关于在 MySQL 排序中使用索引这件事!
-
- 数据库 · Redis | 8小时前 |
- 监控Redis集群健康状态的工具与指标
- 112浏览 收藏
-
- 数据库 · Redis | 1星期前 |
- Redis数据安全防护全攻略
- 252浏览 收藏
-
- 数据库 · Redis | 2星期前 |
- Redis主从复制故障排查与修复技巧
- 302浏览 收藏
-
- 数据库 · Redis | 2星期前 |
- Redis与HBase存储方案详解
- 325浏览 收藏
-
- 数据库 · Redis | 2星期前 |
- Redis数据安全防护全攻略
- 157浏览 收藏
-
- 数据库 · Redis | 2星期前 |
- 高并发Redis优化技巧分享
- 257浏览 收藏
-
- 数据库 · Redis | 2星期前 |
- Redis数据安全防护全攻略
- 398浏览 收藏
-
- 数据库 · Redis | 3星期前 |
- Redis配置加密方法与安全设置
- 232浏览 收藏
-
- 数据库 · Redis | 3星期前 |
- RedisHyperLogLog高效统计技巧
- 283浏览 收藏
-
- 数据库 · Redis | 3星期前 |
- Redis与MySQL缓存同步方法详解
- 141浏览 收藏
-
- 数据库 · Redis | 3星期前 |
- Redis布隆过滤器防穿透原理解析
- 312浏览 收藏
-
- 数据库 · Redis | 1个月前 |
- Redis容器化部署实战技巧分享
- 195浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- ChatExcel酷表
- ChatExcel酷表是由北京大学团队打造的Excel聊天机器人,用自然语言操控表格,简化数据处理,告别繁琐操作,提升工作效率!适用于学生、上班族及政府人员。
- 3163次使用
-
- Any绘本
- 探索Any绘本(anypicturebook.com/zh),一款开源免费的AI绘本创作工具,基于Google Gemini与Flux AI模型,让您轻松创作个性化绘本。适用于家庭、教育、创作等多种场景,零门槛,高自由度,技术透明,本地可控。
- 3375次使用
-
- 可赞AI
- 可赞AI,AI驱动的办公可视化智能工具,助您轻松实现文本与可视化元素高效转化。无论是智能文档生成、多格式文本解析,还是一键生成专业图表、脑图、知识卡片,可赞AI都能让信息处理更清晰高效。覆盖数据汇报、会议纪要、内容营销等全场景,大幅提升办公效率,降低专业门槛,是您提升工作效率的得力助手。
- 3403次使用
-
- 星月写作
- 星月写作是国内首款聚焦中文网络小说创作的AI辅助工具,解决网文作者从构思到变现的全流程痛点。AI扫榜、专属模板、全链路适配,助力新人快速上手,资深作者效率倍增。
- 4506次使用
-
- MagicLight
- MagicLight.ai是全球首款叙事驱动型AI动画视频创作平台,专注于解决从故事想法到完整动画的全流程痛点。它通过自研AI模型,保障角色、风格、场景高度一致性,让零动画经验者也能高效产出专业级叙事内容。广泛适用于独立创作者、动画工作室、教育机构及企业营销,助您轻松实现创意落地与商业化。
- 3784次使用
-
- redis复制有可能碰到的问题汇总
- 2023-01-01 501浏览
-
- 使用lua+redis解决发多张券的并发问题
- 2023-01-27 501浏览
-
- Redis应用实例分享:社交媒体平台设计
- 2023-06-21 501浏览
-
- 使用Python和Redis构建日志分析系统:如何实时监控系统运行状况
- 2023-08-08 501浏览
-
- 如何利用Redis和Python实现消息队列功能
- 2023-08-16 501浏览

