String
- String是Redis最基本的数据类型(较常用),一个key对应一个value
- string类型是二进制安全的,Redis的string可以包含任何数据
- 一个Redis中字符串value最多是512M
set和setnx的区别:
set: 如果不存在key,则直接创建,如果存在,将key对应的value值覆盖掉
setnx:如果不存在key,则直接创建,如果存在对key进行操作,返回的结果是0,相当于false
incr key 操作的原子性
- 所谓原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch (切换到另一个线程)。
- 在单线程中, 能够在单条指令中完成的操作都可以认为是" 原子操作",因为中断只能发生于指令之间。
- 在多线程中,不能被其它进程(线程)打断的操作就叫原子操作。
- Redis单命令的原子性主要得益于Redis的单线程
l 思考: java中i++是否是原子操作?
i++并不具有原子性
i++有三个步骤:
-
- 取值
- 运算
- 赋值
get <key> | 查询对应键值 |
set <key> <value> | 添加键值对 |
append <key> <value> | 将给定的value追加到原值的末尾 |
strlen <key> | 获取值的长度 |
senx <key> <value> | 只有在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> | 同时获取一个或者多个value |
msetnx <key1> <value1> <key2> <value2> | 同时设置一个或多个key-value对,当且仅当所有给定的key都不存在 |
getrange <key> <起始位置> <结束位置> | 获得值的范围,类似java中的substring(包头包尾) |
setrange <key> <起始位置> <value> | 用<value>覆盖<key>所存储的字符串值,从<起始位置>开始 |
setex <key> <过期时间> <value> | 设置键值的同时,设置过去时间,单位秒 |
getset <key> <value> | 以新换旧,设置了新值的同时获取旧值 |