[Redis][String][上]详细讲授

打印 上一主题 下一主题

主题 497|帖子 497|积分 1491


0.前言



  • 字符串范例是Redis最基础的数据范例,关于字符串必要特殊注意

    • Redis中所有的键的范例都是字符串范例,⽽且其他⼏种数据结构也都是在字符串雷同基础上构建的

      • 例如:列表和聚集的元素范例是字符串范例

    • 字符串范例的值实际可以是字符串,包罗⼀般格式的字符串 --> 不仅仅可以存储文本数据

      • 雷同JSON、XML格式的字符串
      • 数字,可以是整型或者浮点型
      • 甚⾄是⼆进制流数据,

        • 例如:图⽚、⾳频、视频等




  • ⼀个字符串的最⼤值不能超过512MB
  • Redis内部存储字符串完全是按照⼆进制流的形式保存的

    • Redis是不处置惩罚字符集编码问题的,客⼾端传⼊的下令中使⽤的是什么字符集编码,就存储什么字符集编码


1.常见下令

1.SET



  • 功能:将string范例的value设置到key中

    • 如果key不存在,则创建新的键值对
    • 如果key之前存在,则覆盖,⽆论原来的数据范例是什么(可能会改变原来的数据范例),之前关于此key的TTL也全部失效

  • 语法:SET key value [expiration EX seconds|PX milliseconds] [NX|XX]
  • 选项

    • EX seconds:使⽤秒作为单位设置key的逾期时间
    • PX milliseconds:使⽤毫秒作为单位设置key的逾期时间
    • NX:只在key不存在时才进⾏设置,即如果key之前已经存在,设置不执⾏
    • XX:只在key存在时才进⾏设置,即如果key之前不存在,设置不执⾏

      • 相称于更新key的value

    • 注意:由于带选项的SET下令可以被SETNX, SETEX, PSETEX等下令代替,以是之后的版本中,Redis可能举行合并

  • 返回值

    • 如果设置乐成,返回OK
    • 如果由于SET指定了NX或者XX但条件不满⾜,SET不会执⾏,并返回(nil)

  • 时间复杂度:                                        O                            (                            1                            )                                  O(1)                     O(1)

2.GET



  • 功能:获取key对应的value

    • 如果key不存在,返回nil
    • 如果value的数据范例不是string,会报错

  • 语法:GET key
  • 返回值:key对应的value,或者当key不存在时返回nil
  • 时间复杂度:                                        O                            (                            1                            )                                  O(1)                     O(1)

3.MSET && MGET



  • MSET:

    • 功能:一次性设置多个key的值
    • 语法:MSET key value [key value ...]
    • 返回值:永远是OK
    • 时间复杂度:                                                  O                                  (                                  1                                  )                                          O(1)                           O(1)

  • MGET

    • 功能:⼀次性获取多个key的值

      • 如果对应的key不存在或者对应的数据范例不是string,返回nil

    • 语法:`MGET key [key …]
    • 返回值:对应value的列表
    • 时间复杂度:                                                  O                                  (                                  1                                  )                                          O(1)                           O(1)

  • 多次GET和单词MGET比较:使用MGET/MSET可有效减少网络时间,性能较高

  • 综上:学会使⽤批量操纵,可以有效提⾼业务处置惩罚服从

    • 注意:每次批量操纵所发送的键的数目也不是⽆节制的,否则可能造成单⼀下令执⾏时间过⻓,导致Redis壅闭


4.SETNX && SETXX



  • SETNX

    • 功能:设置key-value,但只允许在key之前不存在的情况下
    • 语法:SETNX key value
    • 时间复杂度:                                                  O                                  (                                  1                                  )                                          O(1)                           O(1)
    • 返回值:1表⽰设置乐成,0表⽰没有设置

  • SETXX

    • 功能:设置key-value,但只允许在key之前存在的情况下
    • 语法:SETXX key value
    • 时间复杂度:                                                  O                                  (                                  1                                  )                                          O(1)                           O(1)
    • 返回值:1表⽰设置乐成,0表⽰没有设置

  • SET、SETNX、SETXX执⾏流程


2.计数下令

1.INCR



  • 功能:将key对应的string表⽰的数字加⼀

    • 如果key不存在,则视为key对应的value是0
    • 如果key对应的string不是⼀个整型或者范围超过了64位有符号整型,则报错

  • 语法:INCR key
  • 返回值:integer范例的加完后的数值
  • 时间复杂度:                                        O                            (                            1                            )                                  O(1)                     O(1)

2.INCRBY



  • 功能:将key对应的string表⽰的数字加上对应的值

    • 如果key不存在,则视为key对应的value是0
    • 如果key对应的string不是⼀个整型或者范围超过了64位有符号整型,则报错

  • 语法:INCRBY key increment
  • 返回值:integer范例的加完后的数值
  • 时间复杂度:                                        O                            (                            1                            )                                  O(1)                     O(1)

3.DECR



  • 功能:将key对应的string表⽰的数字减⼀

    • 如果key不存在,则视为key对应的value是0
    • 如果key对应的string不是⼀个整型或者范围超过了64位有符号整型,则报错

  • 语法:DECR key
  • 时间复杂度:                                        O                            (                            1                            )                                  O(1)                     O(1)
  • 返回值:integer范例的减完后的数值

4.DECYBY



  • 功能:将key对应的string表⽰的数字减去对应的值

    • 如果key不存在,则视为key对应的value是0
    • 如果key对应的string不是⼀个整型或者范围超过了64位有符号整型,则报错

  • 语法:DECRBY key decrement
  • 时间复杂度:                                        O                            (                            1                            )                                  O(1)                     O(1)
  • 返回值:integer范例的减完后的数值

5.INCRBYFLOAT



  • 功能:将key对应的string表⽰的浮点数加上对应的值,允许采⽤科学计数法表⽰浮点数

    • 如果对应的值是负数,则视为减去对应的值
    • 如果key不存在,则视为key对应的value是0
    • 如果key对应的不是string,或者不是⼀个浮点数,则报错

  • 语法:INCRBYFLOAT key increment
  • 时间复杂度:                                        O                            (                            1                            )                                  O(1)                     O(1)
  • 返回值:加/减完后的数值

6.注意



  • Redis存储整数,是直接使用int范例存的,而存储小数,本质上是当作字符串来存储

    • Redis的int比较方便算术运算
    • 小数意味着每次举行算术运算,都必要把字符串转成小数,举行运算,再把效果转回字符串保存

  • 很多存储系统和编程语⾔内部使⽤CAS机制实现计数功能,会有⼀定的CPU开销

    • 但在Redis中完全不存在这个问题,由于Redis是单线程架构,任何下令到了Redis服务端都要顺序执⾏

  • 由于Redis处置惩罚下令的时候,是单线程模型,多个客户端同时针对同一个key举行INCR等操纵,不会引起"线程安全"问题


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

星球的眼睛

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表