zoukankan      html  css  js  c++  java
  • redis 入门之string

    set  用法

    #set key value 设置value为字符串的键值对
    redis> SET key "value" #对不存在的key设置value OK redis> GET key "value"

    redis> SET key "new-value" # 对已经存在的key设置value
    OK
    redis> GET key
    "new-value"

    redis> SET key-with-expire-time "hello" EX 10086 #使用EX选项,设置过期时间,单位为秒
    OK redis> GET key-with-expire-time "hello" redis> TTL key-with-expire-time (integer) 10069
    redis> SET key-with-pexpire-time "moto" PX 123321  #使用PX选项,设置时间为毫秒
    OK
    redis> GET key-with-pexpire-time
    "moto"
    redis> PTTL key-with-pexpire-time
    (integer) 111939

    redis> SET not-exists-key "value" NX #NX选项,只对不存在的key设置value
    OK      # 键不存在,设置成功
    redis> GET not-exists-key   
    "value"
    redis> SET not-exists-key "new-value" NX
    (nil)   # 键已经存在,设置失败
    redis> GEt not-exists-key
    "value" # 维持原值不变
    redis> EXISTS exists-key   #XX选项,只对已经存在的key设置value
    (integer) 0
    redis> SET exists-key "value" XX
    (nil)   # 因为键不存在,设置失败
    redis> SET exists-key "value"
    OK      # 先给键设置一个值
    redis> SET exists-key "new-value" XX
    OK      # 设置新值成功
    redis> GET exists-key
    "new-value"

    setnx   等同于上面的 set 加上nx

    redis> EXISTS job                # job 不存在
    (integer) 0
    redis> SETNX job "programmer"    # job 设置成功
    (integer) 1
    redis> SETNX job "code-farmer"   # 尝试覆盖 job ,失败
    (integer) 0
    redis> GET job                   # 没有被覆盖
    "programmer"

    setex  将键 key 的值设置为 value , 并将键 key 的生存时间设置为 seconds 秒钟

    在键 key 不存在的情况下执行 SETEX :
    redis> SETEX cache_user_id 60 10086
    OK
    redis> GET cache_user_id  #
    "10086"
    redis> TTL cache_user_id  # 剩余生存时间
    (integer) 49
    键 key 已经存在, 使用 SETEX 覆盖旧值:
    redis> SET cd "timeless"
    OK
    redis> SETEX cd 3000 "goodbye my love"
    OK
    redis> GET cd
    "goodbye my love"
    redis> TTL cd
    (integer) 2997

    psetex 这个命令和 SETEX 命令相似, 但它以毫秒为单位设置 key 的生存时间, 而不是像 SETEX 命令那样以秒为单位进行设置。

    redis> PSETEX mykey 1000 "Hello"
    OK
    redis> PTTL mykey
    (integer) 999
    redis> GET mykey
    "Hello"

    get 如果键 key 不存在, 那么返回特殊值 nil ; 否则, 返回键 key 的值。(get 只用于字符串类型)

    对不存在的键 key 或是字符串类型的键 key 执行 GET 命令:
    redis> GET db
    (nil)
    redis> SET db redis
    OK
    redis> GET db
    "redis"
    对不是字符串类型的键 key 执行 GET 命令:
    redis> DEL db
    (integer) 1
    redis> LPUSH db redis mongodb mysql
    (integer) 3
    redis> GET db
    (error) ERR Operation against a key holding the wrong kind of value

    getset 将键 key 的值设为 value , 并返回键 key 在被设置之前的旧值。

    redis> GETSET db mongodb    # 没有旧值,返回 nil
    (nil)
    redis> GET db
    "mongodb"
    redis> GETSET db redis      # 返回旧值 mongodb
    "mongodb"
    redis> GET db
    "redis"

    strlen 返回键 key 储存的字符串值的长度。

    获取字符串值的长度:
    redis> SET mykey "Hello world"
    OK
    redis> STRLEN mykey
    (integer) 11
    不存在的键的长度为 0 :
    redis> STRLEN nonexisting
    (integer) 0

    append  

    如果键 key 已经存在并且它的值是一个字符串, APPEND 命令将把 value 追加到键 key 现有值的末尾。
    如果 key 不存在, APPEND 就简单地将键 key 的值设为 value , 就像执行 SET key value 一样。
    返回追加 value 之后, 键 key 的值的长度。

    对不存在的 key 执行 APPEND :
    redis> EXISTS myphone               # 确保 myphone 不存在
    (integer) 0
    redis> APPEND myphone "nokia"       # 对不存在的 key 进行 APPEND ,等同于 SET myphone "nokia"
    (integer) 5                         # 字符长度
    对已存在的字符串进行 APPEND :
    redis> APPEND myphone " - 1110"     # 长度从 5 个字符增加到 12 个字符
    (integer) 12
    redis> GET myphone
    "nokia - 1110"

    setrange

    从偏移量 offset 开始, 用 value 参数覆写(overwrite)键 key 储存的字符串值。不存在的键 key 当作空白字符串处理。SETRANGE 命令会返回被修改之后, 字符串值的长度
    SETRANGE 命令会确保字符串足够长以便将 value 设置到指定的偏移量上, 如果键 key 原来储存的字符串长度比偏移量小(比如字符串只有 5 个字符长,但你设置的 offset 是 10 ), 那么原字符和偏移量之间的空白将用零字节(zerobytes, "x00" )进行填充。

    对非空字符串执行 SETRANGE 命令:
    redis> SET greeting "hello world"
    OK
    redis> SETRANGE greeting 6 "Redis"
    (integer) 11
    redis> GET greeting
    "hello Redis"
    对空字符串/不存在的键执行 SETRANGE 命令:
    redis> EXISTS empty_string
    (integer) 0
    redis> SETRANGE empty_string 5 "Redis!"   # 对不存在的 key 使用 SETRANGE
    (integer) 11
    redis> GET empty_string                   # 空白处被"x00"填充
    "x00x00x00x00x00Redis!"

    getrange

    返回键 key 储存的字符串值的指定部分, 字符串的截取范围由 start 和 end 两个偏移量决定 (包括 start 和 end 在内)。
    负数偏移量表示从字符串的末尾开始计数, -1 表示最后一个字符, -2 表示倒数第二个字符, 以此类推。

    redis> SET greeting "hello, my friend"
    OK
    redis> GETRANGE greeting 0 4          # 返回索引0-4的字符,包括4。
    "hello"
    redis> GETRANGE greeting -1 -5        # 不支持回绕操作
    ""
    redis> GETRANGE greeting -3 -1        # 负数索引
    "end"
    redis> GETRANGE greeting 0 -1         # 从第一个到最后一个
    "hello, my friend"
    redis> GETRANGE greeting 0 1008611    # 值域范围不超过实际字符串,超过部分自动被符略
    "hello, my friend"

    incr 

    为键 key 储存的数字值加上一。
    如果键 key 不存在, 那么它的值会先被初始化为 0 , 然后再执行 INCR 命令。
    如果键 key 储存的值不能被解释为数字, 那么 INCR 命令将返回一个错误。

    redis> SET page_view 20
    OK
    redis> INCR page_view
    (integer) 21
    redis> GET page_view    # 数字值在 Redis 中以字符串的形式保存
    "21"

    incrby

    为键 key 储存的数字值加上增量 increment 。返回在加上增量 increment 之后, 键 key 当前的值。
    如果键 key 不存在, 那么键 key 的值会先被初始化为 0 , 然后再执行 INCRBY 命令。
    如果键 key 储存的值不能被解释为数字, 那么 INCRBY 命令将返回一个错误

    键存在,并且值为数字:
    redis> SET rank 50
    OK
    redis> INCRBY rank 20
    (integer) 70
    redis> GET rank
    "70"
    键不存在:
    redis> EXISTS counter
    (integer) 0
    redis> INCRBY counter 30
    (integer) 30
    redis> GET counter
    "30"

    incrbyfloat 

    为键 key 储存的值加上浮点数增量 increment 。返回在加上增量 increment 之后, 键 key 的值。
    如果键 key 不存在, 那么 INCRBYFLOAT 会先将键 key 的值设为 0 , 然后再执行加法操作。
    如果命令执行成功, 那么键 key 的值会被更新为执行加法计算之后的新值, 并且新值会以字符串的形式返回给调用者。

    redis> GET decimal
    "3.0"
    redis> INCRBYFLOAT decimal 2.56
    "5.56"
    redis> GET decimal
    "5.56"

    decr 

    为键 key 储存的数字值减去一。DECR 命令会返回键 key 在执行减一操作之后的值。
    如果键 key 不存在, 那么键 key 的值会先被初始化为 0 , 然后再执行 DECR 操作。
    如果键 key 储存的值不能被解释为数字, 那么 DECR 命令将返回一个错误。

    对储存数字值的键 key 执行 DECR 命令:
    redis> SET failure_times 10
    OK
    redis> DECR failure_times
    (integer) 9
    对不存在的键执行 DECR 命令:
    redis> EXISTS count
    (integer) 0
    redis> DECR count
    (integer) -1

    decrby

    将键 key 储存的整数值减去减量 decrement 。DECRBY 命令会返回键在执行减法操作之后的值。
    如果键 key 不存在, 那么键 key 的值会先被初始化为 0 , 然后再执行 DECRBY 命令。
    如果键 key 储存的值不能被解释为数字, 那么 DECRBY 命令将返回一个错误

    对已经存在的键执行 DECRBY 命令:
    redis> SET count 100
    OK
    redis> DECRBY count 20
    (integer) 80
    对不存在的键执行 DECRBY 命令:
    redis> EXISTS pages
    (integer) 0
    redis> DECRBY pages 10
    (integer) -10

    mset 

    同时为多个键设置值。返回OK
    如果某个给定键已经存在, 那么 MSET 将使用新值去覆盖旧值, 如果这不是你所希望的效果, 请考虑使用 MSETNX 命令, 这个命令只会在所有给定键都不存在的情况下进行设置。
    MSET 是一个原子性(atomic)操作, 所有给定键都会在同一时间内被设置, 不会出现某些键被设置了但是另一些键没有被设置的情况。

    同时对多个键进行设置:
    redis> MSET date "2012.3.30" time "11:00 a.m." weather "sunny"
    OK
    redis> MGET date time weather
    1) "2012.3.30"
    2) "11:00 a.m."
    3) "sunny"
    覆盖已有的值:
    redis> MGET k1 k2
    1) "hello"
    2) "world"
    redis> MSET k1 "good" k2 "bye"
    OK
    redis> MGET k1 k2
    1) "good"
    2) "bye"

    msetnx

    当且仅当所有给定键都不存在时, 为所有给定键设置值。
    即使只有一个给定键已经存在, MSETNX 命令也会拒绝执行对所有键的设置操作。
    MSETNX 是一个原子性(atomic)操作, 所有给定键要么就全部都被设置, 要么就全部都不设置, 不可能出现第三种状态。

    对不存在的键执行 MSETNX 命令:
    
    redis> MSETNX rmdbs "MySQL" nosql "MongoDB" key-value-store "redis"
    (integer) 1
    redis> MGET rmdbs nosql key-value-store
    1) "MySQL"
    2) "MongoDB"
    3) "redis"
    对某个已经存在的键进行设置:
    redis> MSETNX rmdbs "Sqlite" language "python"  # rmdbs 键已经存在,操作失败
    (integer) 0
    redis> EXISTS language                          # 因为 MSETNX 命令没有成功执行
    (integer) 0                                     # 所以 language 键没有被设置
    redis> GET rmdbs                                # rmdbs 键也没有被修改
    "MySQL"

    mget 

    返回给定的一个或多个字符串键的值。
    如果给定的字符串键里面, 有某个键不存在, 那么这个键的值将以特殊值 nil 表示

    redis> SET redis redis.com
    OK
    redis> SET mongodb mongodb.org
    OK
    redis> MGET redis mongodb
    1) "redis.com"
    2) "mongodb.org"
    redis> MGET redis mongodb mysql     # 不存在的 mysql 返回 nil
    1) "redis.com"
    2) "mongodb.org"
    3) (nil)
  • 相关阅读:
    POJ C程序设计进阶 编程题#4:Tomorrow never knows?
    POJ C程序设计进阶 编程题#3: 发票统计
    深度学习笔记(10)- 控制中心之电源管理、鼠标和触控板、键盘和语言
    深度学习笔记(09)- 控制中心之时间设置
    深度学习笔记(08)- 控制中心之网络设置
    深度学习笔记(07)- 控制中心之声音设置
    深度学习笔记(06)- 控制中心之个性化设置
    深度学习笔记(05)- 控制中心之显示与默认程序
    深度学习笔记(04)- 控制中心之首页与用户管理
    深度学习笔记(03)- 启动器
  • 原文地址:https://www.cnblogs.com/tigerzhouv587/p/11344984.html
Copyright © 2011-2022 走看看