美文网首页
redis字符串数据类型

redis字符串数据类型

作者: gzss | 来源:发表于2019-06-18 22:23 被阅读0次

    字符串类型是redis中最基本的数据类型,他能存储任何形式的字符串,包括二进制数据。可以用来存储用户邮箱,JSON化的对象甚至是一张图片。一个字符串类型键允许存储的数据的最大容量是512M。

    常用命令

    复制与取值:set key value 和 get key 如:set keyword hello设置keyword的值为hello,get keyword 返回hello如果键不存在则返回空结果。

    递增数字:incr key 如:incr keyword 返回1,incr keyword 返回2.如果设置的key的值为字符串使用incr会返回错误。例如 set keyword foo 此时keyword的值为字符串,incr keyword 则会报错,(error)ERR value is not an integer or out of range。

    实际运用

    记录文章访问量:博客的一个常见功能是统计文章的访问量,我们可以为每篇文章使用一个名为post:文章ID:page.view的键来记录文章的访问量,每次访问文章的时候使用INCR命令使相应的键值递增。

    生成自增ID:在数据库中我们可以设置字段属性为AUTO_INCREMENT来实现唯一的递增ID。在redis中也可以通过incr命令来实现相同的功能。

    存储文章结构:字符串数据类型只能存储一个字符串,如果想要存储文章结构(一般包括,标题、正文、作者、发布时间等元素)存储这种对象数据,我们可以通过序列化或者json转化成字符串来进行存储,读取时获得字符串在通过反序列化的方式拿到对应的对象。

    备注:redis对于键的命名并没有特别的要求,但是比较好的实践使用“对象类型:对象ID:对象属性”来命名一个键,如使用user:1:friends来存储ID为1的用户的好友列表。对于多个单词则推荐使用“.”分隔。

    其他命令

    增加指定的整数:incrby key increment 例如:incrby keyword 3,给keyword增加3

    减少指定的整数:decr key 或 decr key decrement 使用方式与incr相同。

    增加指定浮点数:incrbyfloat key increment,例如 incrbyfloat keyword 2.9

    向尾部追加值:append key value 例如:set keyword hello 设置keyword的值为hello,append keyword “ world!” 此时keyword的值为“hello word!”

    获取字符串长度:strlen key 例如:set key 你好。 strlen key 返回6,由于字符串可以存储二进制字符,所以它可以存储任何编码的字符串。本例中采用的是UTF-8的编码格式,每个字的长度都是3所以返回6.

    同时获得或设置多个key的值:获得 mget key[key....] ,设置 mset key value [key value ...]用法与get set相似。

    位操作:

    redis的字符串类型存储的是二进制数据,一个字节由8个二进制位组成,redis提供了4个命令可以直接对二进制位进行操作,他们是:

    GETBIT key offset

    setbit key offset value

    bitcount key [start] [end]

    bitop operation destkey key [key ...]

    下面我们对这些命命令进行演示:

    首先将 foo 赋值为bar:set foo bar。bar的三个字母分别是 b、a、r对应的ASCII码分别为98、97、114,转换成二进制分别为1100010、1100001、1110010,所以foo键中的二进制位结构如下图:

    bar的二进制结构

    getbit命令可以获得一个字符串类型键指定位置的二进制的值(0或1),索引从0开始:getbit foo 0 返回 0,getbit foo 6 返回1。如果需要获取的二进制为的索引超出了键值的二进制位的实际长度则默认值是0.

    setbit命令可以设置字符串类型键值质指定位置的二进制位的值,返回值是该位置的旧值。如果我们要将bar设置为aar,可以通过位操作将foo键的二进制位的索引第6位设为0,第7位设为1:setbit foo 6 0 返回1,setbit foo 7 1 返回0。如果设置的位置超过了键值的二进制位的长度,setbit命令会自动将中间的二进制位设置为0,同理设置一个不存在的键的指定二进制位的值会自动将其前面的位赋值为0。

    bitcount 命令可以获得字符串类型键中值是1的二进制位个数,例如:bitcount foo 返回10 。可以通过参数来限制统计的字节范围,如果我们只希望统计前两个字节(ba):bitcount foo 0 1 返回6.

    bitop命令可以对多个字符串类型键进行位运算,并将结果存储在destkey参数指定的键中。bitop命令支持的运算操作有and、or、xor、not。例如:我们可以对bar和aar进行or运算。

    先设置两个key的值,set foo1 bar,set foo2 aar 

    进行or运算:bitop or res foo1 foo2。获取res值 get res 返回 car。

    运算过程如下:

    相关文章

      网友评论

          本文标题:redis字符串数据类型

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