首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >实例讲解redis的hash散列类型

实例讲解redis的hash散列类型

作者头像
章鱼喵
发布于 2018-06-27 15:16:54
发布于 2018-06-27 15:16:54
2.1K0
举报
文章被收录于专栏:codingcoding

hash散列类型简介

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

  • 发布文章
代码语言:javascript
复制
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}";
    }
}
  • 以slug为条件读取文章
代码语言:javascript
复制
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 '该文章不存在!';
    }
}
  • 更改文章的slug
代码语言:javascript
复制
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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.07.23 ,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • hash散列类型简介
  • 实例
    • 需求
  • 源码下载
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档