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

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

     

  • 相关阅读:
    单片机驱动为什么要设置为低电平有效?
    zip file closed 错误。weblogic部署项目,报错zip file closed。控制端重启weblogic正常
    常用的网络通信协议:TCP与UCP
    Oracle简单查询之多表查询。group by,where,having ,内外连接left join ,right jion,inner join,自查询
    tomcat与apache区别
    null ,request parameters:{}
    orcle数据库修改已存数据的列的数据类型
    A query was run and no Result Maps were found for the Mapped Statement 'com.wondersgroup.service.sdgl.dao.Bf62ModelMapper.findAll'. It's likely that neither a Result Type nor a Result Map was specif
    控制台打印列未定义错误
    idea项目结构旁边出现0%classes,0%lines covered
  • 原文地址:https://www.cnblogs.com/zerotomax/p/7469573.html
Copyright © 2011-2022 走看看