前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >实例讲解redis的hash散列类型

实例讲解redis的hash散列类型

作者头像
章鱼喵
发布2018-06-27 15:16:54
1.3K0
发布2018-06-27 15:16:54
举报
文章被收录于专栏: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 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • hash散列类型简介
  • 实例
    • 需求
    • 源码下载
    相关产品与服务
    云数据库 Redis
    腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档