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

  

 
 
 
posted on 2022-01-12 11:13  格物致知_Tony  阅读(51)  评论(0编辑  收藏  举报

目录导航