redis由单机升级为集群
2021/11/1 19:13:18
本文主要是介绍redis由单机升级为集群,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
背景
由于用户不断增加,业务功能不断积累,redis的使用也变的越多,单机扩展内存已不是最优解,采用了升级redis集群的方案。
官方地址
redis集群兼容说明
兼容改动
1.keys 命令不再允许使用,可改用基于游标的迭代器来完成 scan,最后我会列举使用示例。
2.exists 命令也不再允许使用,可通过ttl判断时间来替代,时间复杂度为O(1),或者根据hash,set等类型长度来替代。
3.multi事务中,需要增加watch。这也暗藏着一个bug。
主要修改的是这三个命令。
scan示例
class pro { public function output($str = '') { echo $str . PHP_EOL; return true; } public function formatList($data) { $data = explode(PHP_EOL, $data); $list = []; $cursor = 0; foreach ($data as $item) { if (empty($item)) continue; if (!$cursor) { $cursor = $item; //没有值,第一个是游标值 } else { $list[] = $item; } } return [$cursor, $list]; } public function main() { $config = config::get('redis_api'); //获取配置 $host = $config[0]['host']; $pwd = $config[0]['pwd']; $port = $config[0]['port']; sleep(2); $redis = new Redis(); //实例化redis $cursor = 0; //游标值,为0表示结束 $size = 100; try { do { //命令行方式执行redis scan $shell = "redis-cli -h $host -a $pwd -p $port scan $cursor match " . $this->redisKey . "* count $size"; $result = shell_exec($shell); //格式化游标和内容 list($cursor, $list) = $this->formatList($result); foreach ($list as $key) { //进行对结果的操作,如下删除key $redis->del($key); } } while ($cursor != 0); } catch (Exception $e) { $this->output('error:' . $e->getMessage()); } } } $pro = new pro(); $pro->main();
redis事务中的坑
$redis = new redis(); $key = 'test_zp'; //升级集群增加的watch $redis->watch($key); //实例化事务 $multi = $redis->multi(Redis::PIPELINE); //批量执行插入操作 foreach ($list as $item) { $redis->ZADD($key, time(), $item . random_int(100, 500)); } $multi->exec(); // 重点,因为集群升级所加的watch必须用unwatch配合使用 // unwatch必须加 $redis->unwatch($key);
Redis::PIPELINE是为了管道方式执行为了避免多次链接,一次请求完成多个操作。
由于使用了管道,导致了必须使用unwatch,不然会导致exec后面的redis操作失败。
这篇关于redis由单机升级为集群的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-08阿里云Redis项目实战入门教程
- 2024-11-08阿里云Redis资料:新手入门与初级使用指南
- 2024-11-08阿里云Redis教程:新手入门及实用指南
- 2024-11-07阿里云Redis学习入门:新手必读指南
- 2024-11-07阿里云Redis学习入门:从零开始的操作指南
- 2024-11-07阿里云Redis学习:初学者指南
- 2024-11-06阿里云Redis入门教程:轻松搭建与使用指南
- 2024-11-02Redis项目实战:新手入门教程
- 2024-10-22Redis入门教程:轻松掌握数据存储与操作
- 2024-10-22Redis缓存入门教程:快速掌握Redis缓存基础知识