Redis中incr的问题

发布于 2022-09-01 15:51:04 字数 648 浏览 6 评论 0

Redis版本
图片描述

我后台的程序设置了会员ID的起始数

<?php
$redis->set('userId',intval($start));
?>

前台的会员注册会获取这个userId,然后当做它的ID

<?php
$userId = $redis->get('userId');
if($model->insert(['userId'=>$userId])){
    $redis->incr('userId');
}

但现在的问题是,我无论怎么注册会员,这个redis中的userId都不会变,在服务器上操作

incr userId

会返回错误“(error) ERR value is not an integer or out of range”

get userId
"i:10003;"

求大神,没用过几次redis,有些蒙

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

最近可好 2022-09-08 15:51:04

我猜想你初始化代码的时候用了

$redis->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_PHP);

所以到数据库的最终值是一个字符串 "i:10003;",而字符串就不能 incr 了

$r = $redis->incr('userId'); // 这里的返回值应该是 false

如果你一定要使用序列化,只能将就使用 zIncrBy,zIncrBy 被序列化的是 member,操作的是 score,所以不会受到影响

若能看破又如何 2022-09-08 15:51:04

我这个是可以的,你按照我的试试。

clipboard.png

〃安静 2022-09-08 15:51:04

"i:10003;"设置的userId根本不是数字啊

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文