Redis::get获取如果不存在会返回啥
时间: 2023-08-03 13:05:27 浏览: 161
当 Redis 中不存在指定的 key 时,`Redis::get` 方法会返回 `false`。因此,在使用 `Redis::get` 方法获取缓存数据时,应该先判断返回值是否为 `false`,以避免出现错误。例如:
```
$key = "my_key";
$data = Redis::get($key);
if ($data === false) {
// Redis 中不存在指定的 key
// 执行其他操作
}
else {
// Redis 中存在指定的 key
// 处理获取到的缓存数据
}
```
需要注意的是,当 Redis 中存储的数据类型不是字符串时,使用 `Redis::get` 方法获取数据会返回 `false`。例如,当 Redis 中存储的数据类型是列表、哈希表或集合时,应该使用相应的方法进行获取,例如 `Redis::lrange`、`Redis::hgetall` 或 `Redis::smembers` 等方法。
相关问题
if (!Redis::exists($key)) { $data = self::set($key, JwtToken::getCurrentId()); } else { $data = Redis::get($key); }和 $data = Redis::get($key); if (empty($data)) { $data = self::set($key, JwtToken::getCurrentId()); }哪个更好
两种写法都可以实现相同的功能,但是第一个写法可能会更好一些。
这是因为在第一个写法中,我们首先检查 Redis 中是否存在指定的 key,如果不存在则调用 self::set() 方法来设置该 key。这种写法可以避免在 Redis 中重复设置相同的 key,从而减少 Redis 的负载。此外,第一个写法还能够更好地处理 Redis 返回的数据类型,因为 self::set() 方法可以根据需要将数据序列化为字符串并存储到 Redis 中。
而在第二个写法中,我们首先调用 Redis::get() 方法来获取指定的 key,如果返回的数据为空则调用 self::set() 方法来设置该 key。这种写法可能会导致在 Redis 中重复设置相同的 key,从而增加 Redis 的负载。此外,第二个写法还需要在代码中显式地检查返回的数据是否为空,从而增加了代码的复杂度。
get(redis_conn)获取不到
如果你在代码中使用 `get(redis_conn)` 获取 Redis 连接对象时,返回的结果为 `undefined`,可能是因为 Redis 连接对象并没有存储到 process 字典中。
在存储 Redis 连接对象之前,你需要确保已经成功连接到 Redis,并获取到了连接对象。可以使用 `eredis:start_link` 函数连接 Redis,并将连接对象存储到一个变量中,然后再将该变量存储到 process 字典中。例如:
```
{ok, RedisConn} = eredis:start_link("127.0.0.1", 6379),
put(redis_conn, RedisConn).
```
在上面的代码中,我们使用 `eredis:start_link` 函数连接 Redis,并将连接对象存储到变量 `RedisConn` 中。然后,我们使用 `put(redis_conn, RedisConn)` 将变量 `RedisConn` 存储到 process 字典中,以便在其他函数中使用。
在其他函数中使用 Redis 连接对象时,可以通过 `get(redis_conn)` 获取存储在 process 字典中的 Redis 连接对象。例如:
```
RedisConn = get(redis_conn),
{ok, [Value]} = eredis:q(RedisConn, ["GET", Key]),
```
在上面的代码中,我们首先使用 `get(redis_conn)` 获取存储在 process 字典中的 Redis 连接对象,然后使用 `eredis` 库提供的函数对 Redis 进行操作。
需要注意的是,如果在存储 Redis 连接对象之后,仍然无法通过 `get(redis_conn)` 获取连接对象,可能是因为存储的键名不正确,或者存储的过程中发生了错误。你可以在存储和获取的过程中打印日志或者使用 `io:format` 函数进行调试,以便找到具体的问题。