zoukankan      html  css  js  c++  java
  • 2019版:第三章:(2)Redis 五大数据类型 之 String

    一、String 类型

      1、String 是 Redis 最基本的类型,可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value;
      2、String 类型是二进制安全的。意味着 Redis 的 String 可以包含任何数据,比如 jpg 图片或者序列化的对象;
      3、String 类型是 Redis 最基本的数据类型,一个 Redis 中字符串 value 最多可以是 512 M;
     

    二、常用操作  

    get <key>
    查询对应键值
    set <key> <value>
    添加键值对
    append <key> <value>
    将给定的 <value> 追加到原值的末尾
    strlen <key>
    获取值的长度
    setnx <key> <value>
    只有在key不存在时设置key的值,key存在时,不进行修改
    incr <key>
    将key中存储的数字值增1;
    只能对数字值操作,如果为空,新增值为1
    decr <key>
    将key中存储的数字值减1;
    只能对数字之操作,如果为空,新增值为 -1
    incrby / decrby <key> 步长
    将 key 中存储的数字值增减,自定义步长
    mset <key1> <value1> <key2> <value2>
    同时设置一个或多个 key-value 对
    mget <key1> <key2> <key3>
    同时获取一个或多个 value
    msetnx <key1><value1><key2><value2>
    同时设置一个或多个key-value对,当且仅当所有给定的key都不存在
    getrange <key><起始位置><结束位置>
    获取值的范围,类似java中的substring
    setrange <key> <起始位置> <value>
    用<value>覆盖<key>所存储的字符串值,从<起始位置>开始
    setex <key> <过期时间> <value>
    设置键值的同时,设置过期时间,单位秒
    getset <key> <value>
    以新换旧,设置了新值的同时获取旧值

    三、详说 incr key 操作的原子性

      1、所谓原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch(切换到另一个线程)。
        
      2、在单线程中,能够在单条指令中完成的操作都可以认为是“原子操作”,因为中断只能发生于指令之间;
      3、在多线程中,不能被其他进行(线程)打断的操作就叫原子操作;
      4、Redis 单命令的原子性主要得益于 Redis 的单线程
      5、思考:java 中的 i++ 是否是原子操作?
               不是原子操作:
                i++:可以拆分为三步:
    1、读内存到寄存器
    2、在寄存器中自增
    3、写会内存中
    

      

     
     
     
  • 相关阅读:
    emberjs 循环中设置model的不同属性值
    FUTURE .get 异常抛出会如何提示
    cpu ,鲲鹏,x86,主频,门电路,目录
    复制两个类的相同属性
    【深入Java虚拟机(1)】:Java内存区域与内存溢出
    RPC web service
    webservice
    django中配置Pymsql
    定义函数和调用函数的方式,函数形参和实参的介绍
    python名称空间与作用域
  • 原文地址:https://www.cnblogs.com/niujifei/p/15791730.html
Copyright © 2011-2022 走看看