乐趣区

Redis 使用记录(三)

Hash(哈希)
Hash 是一个 String 类型的 field 和 value 的映射表。每个 Hash 可以存储 232 – 1 键值对(40 多亿)。
应用场景
Hash 适合存储结构化的数据
例如一个用户的姓名、生日等数据,如果使用 kye-value 存储,就要转换成字符串形式(json 等),存储和修改都会很麻烦,但是 Hash 可以很方便的实现。
Hash 可以节省内存
由于 Hash 结构会在单个 Hash 元素在不足一定数量时进行压缩存储,所以可以大量节约内存。
可以参考 Redis 利用 Hash 存储节约内存 这篇文章。
实例
<?php
include ‘redis.php’;// 前文中连接 Redis 的方法

$redis = getRedis();

$userId = 1;
$userName = ‘kobe’;
$userNumber = 24;
$userAge = 39;
$redisKey = ‘user_info_’ . $userId;

$redis->hSet($redisKey, ‘name’, $userName);// 设置 key 中的 field 值为 value
echo $redis->hGet($redisKey, ‘name’) . ‘<br />’;// 获取 key 中 field 的值 kobe
$redis->hSetNx($redisKey, ‘name’, ‘Gasol’);// field 不存在时,才能设置
echo $redis->hGet($redisKey, ‘name’) . ‘<br />’;// 获取 key 中 field 的值 kobe
$flag = $redis->hExists($redisKey, ‘name’);// key 中 field 是否存在
print_r($flag);// 1
echo ‘<br />’;
$redis->hSet($redisKey, ‘number’, $userNumber);
$redis->hDel($redisKey, ‘number’);// 删除 key 中 field
echo $redis->hGet($redisKey, ‘number’);// 无数据
$redis->hMset($redisKey, array(‘age’ => $userAge, ‘team’ => $userTeam));// 批量存储多个 field 和 value
print_r($redis->hMGet($redisKey, array(‘age’, ‘team’)));// 批量获取多个 field 的值 Array ([age] => 39 [team] => 湖人队 )
echo ‘<br />’;
echo $redis->hLen($redisKey) . ‘<br />’;// 获取 key 中有多少 field 3
$redis->hSet($redisKey, ‘score’, 2);// 设置 value 为数值
echo $redis->hGet($redisKey, ‘score’) . ‘<br />’;// 2
$redis->hIncrBy($redisKey, ‘score’, 3);// 为数值增量
echo $redis->hGet($redisKey, ‘score’) . ‘<br />’;// 5
print_r($redis->hGetAll($redisKey));// 获取 key 中的所有 field 和 value Array ([name] => kobe [age] => 39 [team] => 湖人队 [score] => 5 )
echo ‘<br />’;
print_r($redis->hKeys($redisKey));// 获取 key 中的所有 field Array ([0] => name [1] => age [2] => team [3] => score )
echo ‘<br />’;
print_r($redis->hVals($redisKey));// 获取 key 中的所有 value Array ([0] => kobe [1] => 39 [2] => 湖人队 [3] => 5 )
echo ‘<br />’;

参考资料:菜鸟教程。

退出移动版