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、写会内存中
    

      

     
     
     
  • 相关阅读:
    ValidationUtils 验证工具
    android获取textview的行数
    自动打开Accesibility Service 可以自动安装APP
    限制EditText最多输入多少汉字
    Android Secret Code
    恢复 混淆后的 stacktrace 文件
    车载系统 降噪处理
    Java常用类库Integer,Character,toCharArray
    Java接口以及匿名内部类,静态代码块
    Java抽象类、继承及多态和适配器的实现
  • 原文地址:https://www.cnblogs.com/niujifei/p/15791730.html
Copyright © 2011-2022 走看看