记一次CodeIgniter 升级redis驱动,导致无法获取redis 数据问题

背景

   项目在运行中,有redis 数据,但是部署的环境 从低版本升级到 7+,发现很多问题,比如session 的锁,比如
   redis 的很多方法都被php-redis弃用了,然后在考虑整体升级 ci 框架和升级驱动的考虑下,选择了谨慎 的只是
   升级redis 的驱动 还有session 的驱动(因为session 也是用了redis 作为存储)

问题

 发现接口中的redis 缓存不起作用了,对比了源码才发现 升级后 redis save 的使用方法发生了改变,存储在redis
 的数据类型从 key=>value 类型转为 hash 类型
低版本
    public function save($id, $data, $ttl = 60, $raw = FALSE)
    {
        if (is_array($data) OR is_object($data))
        {
            if ( ! $this->_redis->sIsMember('_ci_redis_serialized', $id) && ! $this->_redis->sAdd('_ci_redis_serialized', $id))
            {
                return FALSE;
            }

            isset($this->_serialized[$id]) OR $this->_serialized[$id] = TRUE;
            $data = serialize($data);
        }
        elseif (isset($this->_serialized[$id]))
        {
            $this->_serialized[$id] = NULL;
            $this->_redis->sRemove('_ci_redis_serialized', $id);
        }
//@todo 保存方法
        if ($ttl == 0) {
            return $this->_redis->set($id, $data);
        }
        return $this->_redis->set($id, $data, $ttl);
    }
新版本
public function save($id, $data, $ttl = 60, $raw = FALSE)
	{
		switch ($data_type = gettype($data))
		{
			case 'array':
			case 'object':
				$data = serialize($data);
				break;
			case 'boolean':
			case 'integer':
			case 'double': // Yes, 'double' is returned and NOT 'float'
			case 'string':
			case 'NULL':
				break;
			case 'resource':
			default:
				return FALSE;
		}
//@todo 这里是 hash 保存
		if ( ! $this->_redis->hMSet($id, array('__ci_type' => $data_type, '__ci_value' => $data)))
		{
			return FALSE;
		}
		else
		{
			$this->_redis->{static::$_sRemove_name}('_ci_redis_serialized', $id);
		}

		return TRUE;
	}

解决方法

redis-cli keys "key*" | xargs redis-cli del

删除对应所有的 redis 缓存,问题 解决

疑问

version_compare(phpversion('phpredis'), '5', '>=')

新版本中对比的扩展是phpredis
但是我发现 只有用redis 的时候才能获取值
所以我修改成

version_compare(phpversion('redis'), '5', '>=')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值