美文网首页redis学习我是程序员redis
redis系列:通过日志案例学习string命令

redis系列:通过日志案例学习string命令

作者: 阿里云云栖号 | 来源:发表于2018-08-10 13:06 被阅读77次

    前言

    该文章将通过一个小demo将讲述Redis中的string类型命令。demo将以springboot为后台框架快速开发,iview前端框架进行简单的页面设计,为了方便就不使用DB存储数据了,直接采用Redis作为存储。

    文中不会讲述springboot用法及项目搭建部分。直接根据功能方面进行讲述,穿插string命令操作说明。

    如果需要详细了解该项目的其他部分,请点击下方项目Github地址

    项目Github地址:https://github.com/rainbowda/learnWay/tree/master/learnRedis/case-string

    案例

    demo功能是记录日志,整个demo的大致页面如下

    准备工作

    首先定义一个key的前缀,已经存储自增id的key

    日志相关的key将会以myLog:1、myLog:2、myLog:3的形式存储

    redis操作对象

    新增

    先来看看gif图吧

    来看看后台的方法

    从上面代码可以看出有两个操作redis的地方

    valueOperations.increment(MY_LOG_REDIS_ID_KEY, 1);

    valueOperations.set(MY_LOG_REDIS_KEY_PREFIX+myLogId, myLog.toString());

    命令介绍

    valueOperations.increment其实就相当于Redis中的INCR、INCRBY、INCRBYFLOAT、DECR、DECRBY

    INCR

    INCR key

    对存储在指定key的数值执行原子的加1操作。没有对应的key则设置为0,再相加

    INCRBY

    INCRBY key increment

    其实和INCR类似,不同的是这个命令可以指定具体加多少

    INCRBYFLOAT

    INCRBYFLOAT key increment

    也是类似的,不同的是加的数值是浮点数

    执行结果如下

    下面是java代码

    与INCR相反的命令有DECR和DECRBY,这里就不做介绍了。

    valueOperations.set就是对应Redis的SET命令了,相关联的还有SETEX、SETNX和PSETEX。需要注意的是set在Redis版本2.6.12 提供了EX 、PX 、NX 、XX参数用于取代SETEX、SETNX和PSETEX,后续版本可能会移除SETEX、SETNX和PSETEX命令。下面是官网的原话

    Since theSETcommand options can replaceSETNX,SETEX,PSETEX, it is possible that in future versions of Redis these three commands will be deprecated and finally removed.

    SET

    SET key value [expiration EX seconds|PX milliseconds] [NX|XX]

    设置键key对应value

    参数选项

    EX seconds – 设置键key的过期时间,单位时秒

    PX milliseconds – 设置键key的过期时间,单位时毫秒

    NX – 只有键key不存在的时候才会设置key的值

    XX – 只有键key存在的时候才会设置key的值

    SETRANGE

    SETRANGE key offset value

    替换从指定长度开始的字符

    执行结果如下

    下面是java代码

    MSET

    MSET key value [key value ...]

    同时设置多个key、value

     MSETNX

    MSETNX key value [key value ...]

    同时设置多个key、value,key存在则忽略

    查询

    接着写个查询方法,将新增的内容查询出来

    方法中的两行都涉及到了Redis操作,先是通过keys命令获取myLog:*相关的key集合,然后通过multiGet方法(也就是mget命令)获取记录。

    命令介绍

    KEYS

    KEYS pattern

    查找所有符合给定模式pattern(正则表达式)的 key

    GET

    GET key

    获取key对应的value

    执行结果如下

    GETRANGE

    GETRANGE key start end

    获取start到end之间的字符

    执行结果如下

    GETSET

    GETSET key value

    设置key对应的新value且返回原来key对应的value

    执行结果如下

    MGET

    MGET key [key ...]

    返回所有指定的key的value

    执行结果如下

    更新

    来看看代码

    这里的set在新增方法里面讲述过,那么来看看APPEND、STRLEN命令吧

    命令介绍

    APPEND

    APPEND key value

    在value的尾部追加新值

    redis客户端执行的命令如下

    执行结果如下

    STRLEN

    STRLEN key

    返回value的长度

    删除

    代码如下

    可以看到代码中只用了delete方法,对应着Redis的DEL命令(属于基本命令)

    命令介绍

    DEL

    DEL key [key ...]

    删除key

    BIT相关命令

    bit命令有SETBIT、GETBIT、BITCOUNT、BITFIELD、BITOP、BITPOS这些。

    命令这里就不做介绍了,直接讲述bit相关的案例。

    Pattern: real time metrics using bitmaps

    BITOP is a good complement to the pattern documented in the BITCOUNT command documentation. Different bitmaps can be combined in order to obtain a target bitmap where the population counting operation is performed.

    See the article called "Fast easy realtime metrics using Redis bitmaps" for a interesting use cases.

    案例地址Fast easy realtime metrics using Redis bitmaps

    网上译文也有许多,有需要的百度或者google即可

    这里大概讲述下使用位图法统计日登入用户数、周连续登入用户数和月连续登入用户数

    位图法就是bitmap的缩写,所谓bitmap,就是用每一位来存放某种状态,适用于大规模数据,但数据状态又不是很多的情况。通常是用来判断某个数据存不存在的。 ------来自百度百科

    就好像java中int有4个字节,也就是32位。当32位全为1时,也就是int的最大值。

    位只能被设置位0或者1,也就是二进制。

    java中可以用BitSet来操作位的相关操作

    场景

    有一万个用户,id从1到10000,根据当前是否上线,来设置在第id位上是否为1或者0。通过每天的记录来统计用户连续上线的情况。

    分析

    一号有id为5、3、1的上线了,二号有id为5、4、3的上线了,三号有id为3、2、1的上线了。存储的数据如下

    那么我们只有将三天的数据进行与操作就可以知道,三天连续上线的有哪些了,与操作的结果如下

    很明显是id为3的用户连续登入3天。

    代码

    先定义一些常量

    然后模拟一个月的数据

    最后是统计

    测试方法

    测试结果

    有需要看相关代码的请点击GITHUB地址

    其他

    关于其他相关的命令可以查看下方地址

    string全命令

    Redis基本命令

    命令比较多,但是还是建议学习的人最好每个命令都去敲下,加深印象。

    下面诗句送给每一个阅读的人。

    纸上得来终觉浅,绝知此事要躬行。————出自《冬夜读书示子聿》

    本文作者:勿妄

    阅读原文

    本文为云栖社区原创内容,未经允许不得转载。

    相关文章

      网友评论

        本文标题:redis系列:通过日志案例学习string命令

        本文链接:https://www.haomeiwen.com/subject/zpekbftx.html