码迷,mamicode.com
首页 > 其他好文 > 详细

辛星浅析Redis中的字符串类型

时间:2015-02-24 11:25:35      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:redis   string   字符串   nosql   辛星   

      字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这就意味着该类型可以接受任何格式的数据,比如图像数据或者json对象等信息,在Redis中字符串类型的value最多可以容纳的数据长度为512M。

      我们常用的命令如下:

     (1)append  key   value   如果该key已经存在,那么append命令会将参数value的值追加到已经存在的value的末尾,如果该key不存在,那么该命令会创建一个新的空字符串,并且把value追加到其末尾。

    (2)decr   key   将指定的key对应的value原子性的递减1.如果该key不存在,那么其初始值为0,在decr之后其值变成-1,。如果value的值不能转换为整型值,比如hello,该操作将执行失败并且返回错误信息。注意,该操作的取值范围是64位有符号整型。

    (3)incr   key    将指定的key对应的value原子性的递增1.如果该key不存在,那么其初始值为0,在incr之后其值变成1,如果vlaue的值不能转换为整型值,比如hello,那么该操作会执行失败并且返回错误信息。注意,该操作的取值范围是64位有符号整型。

    (4)decrby     key  decrement    将存储在key上的值减去由decrement指定的值,如果该key不存在,那么在进行操作前会将其设置为0,如果与key相关联的值具有错误的数据类型或者包含一个不能转换为整数的字符串时,该操作将会出现错误。该操作只针对64位有符号数。

    (5)get   key   该操作获取存储在key上的值,如果key并不存在,那么将会返回nil。如果存储在key上的值的数据类型并非string,那么将会出现错误。因为get仅仅处理string类型的值。

    (6)getbit   key  offset  它返回存储在key上的字符串在offset偏移处的所具有的位置,如果指定的偏移值超出了字符串的长度,后续字符串被视作由0填充的一片连续空间。如果指定的key不存在,那么将被视为一个空串,在这种情况下,偏移值会超出范围并且可以看做是由0填充的一片连续空间。

    (7)getrange   key   start  end   它的时间复杂度为O(N),这里的N为需要返回的字符串的长度。时间复杂度由最终返回的长度决定,因为从已经存在的字符串中创建一个子串代价很低,可以认为对于较小的字符串而言时间复杂度为O(1)。需要注意的是:该命令在Redis2.0版本之前,被叫做substr。该命令返回在key上的字符串的特定子串,子串的范围由start和end两个偏移值指定,并且均包含端点。在该命令中可以指定负的偏移值,此时偏移值从字符串尾部开始计算。因此,-1意味着最后一个字符,-2意味着倒数第二个字符。如果指定的偏移值超出了字符串固有的长度,则命令将会限定结果的范围为字符串的真实长度。

    (8)getset   key  value   它是原子性的将key上存储的值设置为value,并且返回原有的值。如果key存在但是所存储的值并不是字符串类型,那么将会返回错误。

    (9)incrby   key   increment    它对存储在key上的值加上increment指定的值,如果该key不存在,在执行操作之前会现将其设置为0,然后再执行操作。如果存储在该key上的值具有错误的数据类型或者包含一个不能转换为整型的字符串值,那么将会返回一个错误,该操作只能针对64位有符号整数。

    (10)mget   key1  key2 ....     该操作返回存储在指定keys上面的值。对于每一个其值的数据类型不是字符串类型或者不存在的key,返回值将会成为nil。因此该操作并不会出现失败的情况。

    (11)mset   key1   value1   key2  value2 .....  该操作对指定的keys设置相应的值。与set命令一样,mset将会使用新值替代原有的值,mset操作是原子性的,因此所有指定的keys将会在一次操作过程中设置完成。返回值总是OK,因为该操作不会失败。

     (12)msetnx    key1  value1  key2  value2 ....   它是将给定的keys设置为相应的值,如果指定的keys中任何一个已经存在,那么该操作将不会被执行。因此,msetnx可以用来对唯一的逻辑对象中的表示不同字段的keys设置其值,一遍能够确保这些字段要么全部被设置成功要么均不会设置。msetnx操作是原子性的,因此所有的keys将会在一次操作过程中被设置。如果所有的keys值均被设置,那么返回值为1.如果没有key被设置其值,那么返回值为0.

    (13)set   key  value    它是对指定的key设置一个字符串值,如果该key已经具有值,那么该值将会重写而不管它的数据类型。返回值总是OK,因为set操作不会失败。

    (14)setbit   key  offset   value    它设置或者清除存储在key上的字符串在指定偏移处的位置。命令中的value可以指定为0或者1,根据value的不同,位置可以被设置或者被清除。当该key不存在时,将会创建一个新的字符串的值。字符串的长度可以增长一遍能够包含offset偏移处的值。命令中的offset的值需要大于或者等于0,但是需要小于232。这会将位图的大小限定在512MB以内。当存储在该key上的字符串被扩展时,增加的位将会被设置为0.需要注意的是,当设置最后一个可能的位,偏移值等于231,并且存储在该key上的字符串还没包含字符串值或者包含长度较小的字符串值时,Redis需要重新分配中间内存,这可能会阻塞服务器一段时间。一旦第一次分配空间分配完成后,对相同key后续的setbit调用将不再有空间分配的开销。

     (15)setex   key   seconds   value   该操作设置key上存储的值为value,并且该key在给定的seconds秒后自动超时。该命令等价于set    mykey   value    expire    mykey   seconds。其中setex操作是原子性的,并且可以使用位于multi/exec块中的上述两条命令来取代。该命令提供了对指定操作序列中的一种替代方式,该操作在Redis用作缓存时非常普遍。

    (16)setnx   key  value     如果指定的key不存在,那么将其设置为一个字符串。在这种情况下,该命令等同于set。当在key上已经存储有值时,将不进行任何操作。setnx中可以看做是set   if  not   exists的缩写。

     (17)setrange    key  offset  value     它是存储在key上的字符串被重写的部分从指定的offset位置开始,长度与value所具有的长度相同。如果offset大于当前字符串的长度,字符串会使用0来补充以便适应指定的offset。如果指定的key不存在,那么存储在其上的值会被认为是空格,因此该命令将确保该key会持有一个足够打的字符串以便能够设置其在offset偏移处的值。不过需要注意的是,我们可以设置的最大偏移值为229-1,因为Redis字符串的大小被限定在512MB以内。

    (18)strlen  key   表示返回存储在key上的字符串的长度。如果在该key上存储的值不是字符串类型,那么将返回一个错误。如果该key不存在,那么返回值为0.













辛星浅析Redis中的字符串类型

标签:redis   string   字符串   nosql   辛星   

原文地址:http://blog.csdn.net/xinguimeng/article/details/43924127

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!