image.png
命令 | 行为 |
---|---|
HDEL key field [field ...] | 删除key 中的一个或多个指定域 |
HEXISTS key field | 查看key 中,给定域 field 是否存在 |
HGET key field | 返回key 中给定域 field 的值 |
HGETALL key | 返回key 中,所有的域和值 |
HINCRBY key field increment | 为field 的值加上增量(可以为负数) |
HINCRBYFLOAT key field increment | 加上浮点数增量 |
HKEYS key | 返回key 中的所有域 |
HLEN key | 返回key 中域的数量 |
HMGET key field [field ...] | 返回key 中,一个或多个给定域的值 |
HMSET key field value [field value ...] | 同时设置多个 field-value |
HSET key field value | 将key 中的域 field 的值设为 value |
HSETNX key field value | 当field不存在时,将field设置为value |
HVALS key | 返回所有值 |
HSTRLEN key field | 返回相关field的字符串长度 |
HSET 不区分插入和更新操作,修改数据时不用事先判断否存在,当执行的是插入操作时,返回1,执行的是更新操作时,返回0,当键不存在时,会自动建立
用hash表的post:postid键记录文章的字段:title(标题), content(内容), slug(缩略名)。其中slug不可重复,因此另外以slug.to.id为键记录slug与postid关联
根据这两个hash结构,实现以下三个功能:1.发布文章 2.以slug为条件读取文章 3.更改文章的slug
public function writePost(Request $requset, $title, $content, $slug) {
$title = $requset->param('title');
$content = $requset->param('content');
$slug = $requset->param('slug');
// 获取文章自增id
$postId = $this->redis->incr('posts:count');
// 判断文章缩略名是否已存在
$isSlugAvailable = $this->redis->hsetnx("slug.to.id", $slug, $postId);
if (!$isSlugAvailable) { // 已存在
echo $slug . "-文章缩略名已用过,请更换!";
} else {
$data = array(
'title' => $title,
'content' => $content,
'slug' => $slug,
);
$this->redis->hmset("post:{$postId}", $data);
echo "文章发布成功,id为:{$postId}";
}
}
public function getPost(Request $requset, $slug) {
$slug = $requset->param('slug');
$postId = $this->redis->hget('slug.to.id', $slug);
if ($postId) {
$postData = $this->redis->hgetall("post:{$postId}");
var_dump($postData);
exit;
} else {
echo '该文章不存在!';
}
}
public function updateSlug(Request $requset, $slug, $id) {
$slug = $requset->param('slug');
$postId = $requset->param('id');
$isSlugAvailable = $this->redis->hsetnx('slug.to.id', $slug, $postId);
if (!$isSlugAvailable) {
echo '该缩略名已存在!';
} else {
// 获取旧的缩略名
$oldSlug = $this->redis->hget("post:{$postId}", 'slug');
// 设置新的缩略名
$this->redis->hset("post:{$postId}", 'slug' , $slug);
// 删除旧的缩略名
$this->redis->hdel("slug.to.id", $oldSlug);
}
}
示例代码路径:thinkphp5\application\redis\controller\HashType.php