哈希篇
Redis
哈希(Hashes)
是一种数据类型,表示字符串字段和字符串值之间的映射关系。Redis
哈希结构存储一组字段值对,设计上不占用太多空间,因此非常适合表示数据对象。它提供了添加、获取或删除单个项、获取整个哈希值或将哈希值中的一个或多个字段用作计数器的功能。
场景
哈希使用的场景特别广泛,甚至都可以当数据库来用🐶。比如,存储配置信息等等场景。
对象存储
存储对象是哈希最基本的使用场景, 比如用户对象,商品对象,活动对象等等可以说一切的对象。
- 用户对象
哈希可以用来存储用户对象的信息,每个用户对象可以包含多个字段,如用户名、密码、电子邮件等,这样可以将用户信息组织成一个哈希,方便管理和查询。
- 商品信息
对于电子商务平台,商品信息可以被存储为哈希,每个商品的各种属性(如名称、价格、库存等)可以作为哈希的字段,这样可以方便地查询和更新商品信息。
// 商品信息
$goods = $user = $activity = [];
$redis->hMSet('goods:1', $goods);
缓存存储
哈希可以用来存储缓存数据,例如将一些常用的计算结果或数据库查询结果存储为哈希,可以提高访问速度并减少数据库压力。
$cacheData = $redis->hGetAll('cache:result');
if (!empty($cacheData)) {
return $cacheData;
}
// todo 获取或者计算数据操作
配置管理
可以将系统的配置信息存储为哈希,每个配置项对应一个字段,这样可以方便地进行配置的读取和更新。
// 判断某项功能是否开启
if (!($openComment = $redis->hGet('site:config', 'openComment'))) {
// todo
return false
}
// todo
实时计数器
哈希可以用来实现实时计数器,例如统计网站的访问量、用户的登录次数等,每个计数器对应一个字段,通过增减字段的值来实现计数。
// 访问量+1
$redis->hIncrBy('site:20240322', 'visit', 1);
// 在线数+1
$redis->hIncrBy('site:20240322', 'online', 1);
// 登录次数+1
$redis->hIncrBy('site:20240322', 'login_{uid}', 1);
会话管理
哈希可以用来存储用户会话信息,每个用户的会话信息可以存储为一个哈希,包含用户的登录状态、权限信息等。
$session = [
'uid' => '',
'roles' => [],
'email' => '',
];
$redis->hMSet('session_id', $session);
对象关系映射(ORM)
在应用程序中,可以使用哈希来存储对象之间的关系,例如将用户和其关注的人存储为哈希,可以方便地进行好友关系的管理和查询。
// 用户对象
$redis->hMSet('user:1', []);
$redis->hMSet('user:2', []);
$redis->hMSet('user:3', []);
// 1关注的人
$redis->hset('user:1:follows', 2, 1);
$redis->hset('user:1:follows', 3, 1);
// 获取关注列表
$redis->hKeys('user:1:follows');
用户关注的人用集合处理更合适.
秒杀减库存
比如后台创建秒杀商品时将信息存放在hash
中,前台直接扣除hash
中的库存字段。
// 代表库存没有了
if ($redis->hIncrBy('goods:1', 'stock', -1) < 0) {
return '你来晚了';
}
// todo
协作
如果你有更多的场景使用用例,可以通过github
提交pr
请求。有问题可以开issue
。
编辑此页面