zoukankan      html  css  js  c++  java
  • Redis数据类型--string

    在Redis中支持丰富的数据类型的存储系统,包括:字符串(string),散列(hashes),列表(lists),集合(sets),有序集合(sorted sets),与范围查询,bitmaps,hyperloglogs和地理空间(geospatial)索引半径查询。

    针对每一种数据类型都提供了丰富的操作命令。

    字符串(String)

      我们知道,redis是用C语言编写的,但是在Redis中的字符串,并没有使用传统的C语言中的字符串,而是自己构建一种名为简单字符串(simple dynamic String,SDS)的抽象类型,并且作为Redis的默认字符串表示。

      并且,在Redis中的字符串是二进制安全的。也就是说可以包含任何类型的数据,例如:JPEG类型的图片,或者对象化过的对象。

      一个字符串最大能存储512M的内容。

    Redis提供的操作String的命令

    redis提供的操作字符串的命令大概有24个。

    SET/GET:设置和获取值

    MSET/MGET:设置或获取多个值

    GETSET:设置一个key的value值,并获取设置前的值

    SETRANGE/GETRANGE:设置或获取指定偏移位置的值

    INCR/DECR:执行递增递减1操作

    INCRBY/DECRBY:执行递增递减指定值操作

    INCRBYFLOAT:对浮点数类型执行递增操作

    SETEX/PSETEX:设置值,过期时间以秒或毫秒计算

    SETNX/MSETNX:设置一个或多个值,只有当key都不存在的时候

    STRLEN:获取指定key的长度

    APPEND:追加一个值到key上

    GETBIT/SETBIT:设置或返回在指定位上的值

    BITOP/BITPOS/BITCOUNT/BITFIELD:执行一些位操作

    SET:用来给指定key设值,时间复杂度O(1)。

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

    key:键  value:值 EX seconds:过期时间,单位为秒 PX milliseconds:过期时间,单位为毫秒

    NX:只有不存在的时候才设值  XX:自会有存在的时候才设值

    默认情况下,如果存在的话,set会覆盖原来的值,过期时间什么的也会被清空

    如果设置成功则返回OK,但是设置了NX或者XX的时候,设置失败的时候返回nil

    GET:返回key关联的字符串值,时间复杂度O(1)。

    GET key

    如果key不存在,则返回nil,否则返回字符串的值。

    127.0.0.1:6379> set name lisi
    OK
    127.0.0.1:6379> get name
    "lisi"
    127.0.0.1:6379> set name wangwu
    OK
    127.0.0.1:6379> get name
    "wangwu"
    #设置过期时间30秒 127.0.0.1:6379> set age 23 EX 30 OK 127.0.0.1:6379> get age "23"
    #三十秒后就过期了,在去get就不存在了 127.0.0.1:6379> get age (nil)
    #设置过期时间5000毫秒
    127.0.0.1:6379> set address shanghai PX 5000 OK 127.0.0.1:6379> get address "shanghai" 127.0.0.1:6379> get address (nil) 127.0.0.1:6379> set class three NX OK
    #只有不存在的时候才会去设值
    127.0.0.1:6379> set class three NX (nil) 127.0.0.1:6379> set class two NX (nil) 127.0.0.1:6379> get class "three"
    #只有存在的时候才去设值 127.0.0.1:6379> set class four XX OK 127.0.0.1:6379> get class "four" 127.0.0.1:6379> get grade (nil) 127.0.0.1:6379> set grade one XX (nil) 127.0.0.1:6379>

    MSET

    MSET key value[key value。。。。]

    同时设置一个或多个key-value。时间复杂度O(N),N为要设置的key的数量

    MSET是一个院子操作,所给定key都会在同一时间内被设置。

    MGET

    返回所有,一个或多个给定key的值,时间复杂度为O(N)

    127.0.0.1:6379> MSET name fuwh age 18 address beijing
    OK
    127.0.0.1:6379> MGET name address tel
    1) "fuwh"
    2) "beijing"
    3) (nil)
    127.0.0.1:6379>

    GETSET

    将给定key的值设为value,并返回key的旧值,时间复杂度O(1)。

    127.0.0.1:6379> set name fuwh
    OK
    127.0.0.1:6379> getset name lisi
    "fuwh"
    127.0.0.1:6379> get name
    "lisi"
    127.0.0.1:6379>

     SETRANGE

    SETRANGE key offset value

    用value参数覆盖给定key所存储的字符串从偏移量offset开始的部分,

    时间复杂度:对于小的字符串为O(1),否则为O(M),M为value的参数长度

    返回值为被修改后字符串的长度。

    GETRANGE

    GETRANGE key start end

    返回key中字符串值的子字符串,字符串的截取范围由start和end两个偏移量决定。

    负数表示从字符串最后开始技术,-1表示最后一个字符,-2表示倒数第二个。

    时间复杂度为O(N),N为要返回的字符串长度。

    127.0.0.1:6379> get name
    "lisi"
    127.0.0.1:6379> setrange name 3 hong
    (integer) 7
    127.0.0.1:6379> get name
    "lishong"
    127.0.0.1:6379> setrange name 9 java
    (integer) 13
    127.0.0.1:6379> get name
    "lishongx00x00java"
    127.0.0.1:6379> get name2
    (nil)
    127.0.0.1:6379> setrange name2 3 zhaoliu
    (integer) 10
    127.0.0.1:6379> get name2
    "x00x00x00zhaoliu"
    127.0.0.1:6379> getrange name 0 -1
    "lishongx00x00java"
    127.0.0.1:6379> getrange name 0 22
    "lishongx00x00java"
    127.0.0.1:6379> getrange name -3 -1
    "ava"
    127.0.0.1:6379>

    INCR:时间复杂度O(1)

    INCR key:将key中存储的数字值增1,如果key不存在,那么key的值会被先初始化为0,在执行incr操作。

    DECR:时间复杂度O(1)

    DECR key:将key中存储的数字值减1,如果key不存在,那么key的值会先辈初始化为0,在执行decr操作。

    INCRBY:时间复杂度O(1)

    INCRBY key increment:将key所存储的值加上增量increment

    如果key不存在,那么会先将key的值初始化为0,在执行incrby操作

    DECRBY:时间复杂度O(1)

    DECRBY key decrement:将key所存储的值减去增量increment

    如果key不存在,那么key的值会先被初始化为0,然后在执行decrby操作。

    INCRBYFLOAT:时间复杂度O(1)

    INCRBYFLOAT key increment:为key中所存储的值加上否点数增量increment

    如果key不存在,那么increbyfloat会先将key的值设为0,在执行操作。

    127.0.0.1:6379> INCR age
    (integer) 19
    127.0.0.1:6379> INCR age2
    (integer) 1
    127.0.0.1:6379> INCR name
    (error) ERR value is not an integer or out of range
    127.0.0.1:6379> decr age
    (integer) 18
    127.0.0.1:6379> decr age3
    (integer) -1
    127.0.0.1:6379> decr age3
    (integer) -2
    127.0.0.1:6379> incrby name 2
    (error) ERR value is not an integer or out of range
    127.0.0.1:6379> incrby age 2
    (integer) 20
    127.0.0.1:6379> incrby age4 3
    (integer) 3
    127.0.0.1:6379> decrby age4 5
    (integer) -2
    127.0.0.1:6379> decrby age6 3
    (integer) -3
    127.0.0.1:6379> incrbyfloat age 2.0
    "22"
    127.0.0.1:6379> incrbyfloat age 2.1
    "24.1"
    127.0.0.1:6379> incrbyfloat age -2.1
    "22"
    127.0.0.1:6379>

    SETEX/PSETEX/SETNX/MSETNX

    需要注意的是,这几个命令都可通过SET命令的选项来取代,所以,后面的版本可能会取现这几个命令。

    SETEX:set的时候同时设置过期时间,单位为秒,时间复杂度为O(1)

    SETEX key seconds value  

    SETNX:仅当key不存在的时候设值,时间复杂度O(1)

    SETNX key value

    PSETEX:设置的同时设置过期时间单位为毫秒,时间复杂度O(1)

    PSETEX key milliseconds value

    MSETNX:同时设置一个或多个,仅当key都不存在的时候,时间复杂度O(N)

    MSETNX key value[key value。。。]

    127.0.0.1:6379> setex x1 3 3miao
    OK
    127.0.0.1:6379> get x1
    (nil)
    127.0.0.1:6379> setnx x1 notexit
    (integer) 1
    127.0.0.1:6379> setnx x1 notexit2
    (integer) 0
    127.0.0.1:6379> get x1
    "notexit"
    127.0.0.1:6379> psetex x2 3000 haomiao
    OK
    127.0.0.1:6379> get x2
    (nil)
    127.0.0.1:6379> msetnx x3 xx3 x4 xx4 x5 xx5
    (integer) 1
    127.0.0.1:6379> msetnx x3 xxx3 x6 xx6
    (integer) 0
    127.0.0.1:6379>

    STRLEN

    STRLEN key:返回key所存储的字符串的长度,时间复杂度为O(1)

    127.0.0.1:6379> get name
    "lishongx00x00java"
    127.0.0.1:6379> get name2
    "x00x00x00zhaoliu"
    127.0.0.1:6379> strlen name
    (integer) 13
    127.0.0.1:6379> strlen name2
    (integer) 10
    127.0.0.1:6379>

    APPEND

    APPEND key value:在给定key的字符串的后面追加value,如果存在则是追加,不存在就相当于设置。

    时间复杂度O(1)

    127.0.0.1:6379> set app kugou
    OK
    127.0.0.1:6379> append app yinyue
    (integer) 11
    127.0.0.1:6379> get app
    "kugouyinyue"
    127.0.0.1:6379> append music love
    (integer) 4
    127.0.0.1:6379> get music
    "love"
    127.0.0.1:6379>

    GETBIT/SETBIT/BITOP/BITPOS/BITCOUNT/BITFIELD

    这些命令主要用来操作位。

     

  • 相关阅读:
    LeetCode153 Find Minimum in Rotated Sorted Array. LeetCode162 Find Peak Element
    LeetCode208 Implement Trie (Prefix Tree). LeetCode211 Add and Search Word
    LeetCode172 Factorial Trailing Zeroes. LeetCode258 Add Digits. LeetCode268 Missing Number
    LeetCode191 Number of 1 Bits. LeetCode231 Power of Two. LeetCode342 Power of Four
    LeetCode225 Implement Stack using Queues
    LeetCode150 Evaluate Reverse Polish Notation
    LeetCode125 Valid Palindrome
    LeetCode128 Longest Consecutive Sequence
    LeetCode124 Binary Tree Maximum Path Sum
    LeetCode123 Best Time to Buy and Sell Stock III
  • 原文地址:https://www.cnblogs.com/zerotomax/p/7469573.html
Copyright © 2011-2022 走看看