实例讲解redis字符串类型

字符串类型简介

字符串类型是Redis中最基本的数据类型,能存储任何形式的字符串

字符串类型

相关命令

命令

行为

GET key

获取值

SET key value

设置值

DEL key

删除值(此命令可用于所有类型)

GETSET key value

将key值设为value,返回旧值

APPEND key value

将value追加到key原来的值末尾

GETRANGE key start end

截取子字符串

INCR key

当值为数字时,每次递增1

INCRBY key increment

增加指定的整数

INCRBYFLOAT key increment

增加浮点数

DECR key

当值为数字时,每次递减1

DECRBY key decrement

减少指定的整数

MGET key [key...]

返回一个或多个key的值

MSET key value [key value ...]

同时设置一个或多个 key-value 对

MSETNX key value [key value ...]

当key都不存在时,设置多个key-value对

SETEX key seconds value

将值 value 关联到 key,生存时间以秒为单位

PSETEX key milliseconds value

以毫秒为单位

SETNX key value

将 key 的值设为 value ,当且仅当 key 不存在

SETRANGE key offset value

替换给定字符串

STRLEN key

返回 key 所储存的字符串值的长度。

了解更多相关命令

redis-cli

[senlong@linux ~]$ redis-cli
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> get hello
"world"
127.0.0.1:6379> del hello
(integer) 1
127.0.0.1:6379> get hello
(nil)

phpredis

class StringType extends Base
{
    public function get($key='name') {
        echo $this->redis->get($key);
    }

    public function set(Request $request, $key, $value) {
        if ($key && $value) {
            $this->redis->set($key, $value);
            echo '设置成功';
        }
    }

    public function del(Request $request, $key='name') {
        $this->redis->del($key);
    }

    public function incr($key) {
        $this->redis->incr($key);
        echo $this->redis->get($key);
    }
}

实践

需求:用redis实现统计博客文章的阅读数量

  • 写入文章

将文章键名命名为 post:id:data (类型:id:属性) 是出于惯例,便于理解。如 post:12:data 表示:第12篇文章的内容

public function setPost() {
    $title = '标题-';
    $content = '内容-';
    $time = date('Y-m-d H:i:s', time());
    // 获取文章自增id
    $postId = $this->redis->incr('posts:count');
    $postData = $title . $content . $time;
    // 写入文章
    $this->redis->set("post:{$postId}:data", $postData);
}
  • 获取文章并统计阅读数量

post:{$id}:page.view 表示文章阅读数,多个单词用 . 相连。如page.view即为page与view相连

/**
 * 每次刷新该方法,阅读数都加1
 * @author zhongsenlong 2017-07-23
 * @param  Request $request [description]
 * @param  integer $id      [description]
 * @return [type]           [description]
 */
public function getPost(Request $request, $id=1) {
    $postData = $this->redis->get("post:{$id}:data");
    if ($postData) {
        echo $postData;
        echo "<br />";
        // 文章阅读次数+1
        $pageView = $this->redis->incr("post:{$id}:page.view");
        echo "该文章被阅读了{$pageView}次";
    } else {
        echo '无此文章';
    }
}

源码下载

源码下载地址

示例代码路径:thinkphp5\application\redis\controller\StringType.php

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏JavaEdge

Mybatis#BaseExecutor源码解析BaseExecutor源码解析

BaseExecutor是Executor的一个子类,是一个抽象类,实现接口Executor的部分方法,并提供了三个抽象方法

1086
来自专栏JavaWeb

Mybatis源码-XXXmapper.xml中的resultMap标签解析过程

1403
来自专栏图像识别与深度学习

蓝牙项目开发心得

3009
来自专栏猿人谷

队列的实现

一、顺序队列 typedef int QElemType;   // c3-3.h 队列的顺序存储结构(可用于循环队列和非循环队列)  #defin...

1946
来自专栏小狼的世界

JavaScript设计模式学习(四)单件(Singleton Pattern)

单件是JavaScript中最基本、最有用的设计模式,而你今后也会经常的使用这个模式。通过单件,我们可以把统一到一个逻辑单元中并且提供一个唯一的入口,这就保证你...

1104
来自专栏小鄧子的技术博客专栏

Master-Worker模式实现立方和相加

Master-Worker框架如下,首先实现的Master线程,主要用作分配任务,和返回结果集。

933
来自专栏小勇DW3

Mybatis使用动态代理实现拦截器功能

  拦截器顾名思义为拦截某个功能的一个武器,在众多框架中均有“拦截器”。这个Plugin有什么用呢?或者说拦截器有什么用呢?可以想想拦截器是怎么实现的。Plug...

2102
来自专栏Spark学习技巧

重要 : 优化flink的四种方式

flink这个框架在逐步变为流处理的主流。本文,我们将针对flink性能调优讲四种不同的方法。

2482
来自专栏专注 Java 基础分享

为并发而生的 ConcurrentHashMap(Java 8)

HashMap 是我们日常最常见的一种容器,它以键值对的形式完成对数据的存储,但众所周知,它在高并发的情境下是不安全的。尤其是在 jdk 1.8 之前,reha...

73011
来自专栏java学习

Java每日一练(2017/6/8)

Java基础 | 数据库 | Android | 学习视频 | 学习资料下载 课前导读 ●回复"每日一练"获取以前的题目! ●答案公布时间:为每期发布题目的第二...

2667

扫码关注云+社区