Redis五大基本数据类型之String字符串类型
一、String 类型数据的基本操作
append key value:在key对应的字符串后面追加value,返回值为追加后的字符串的长度- 如果当前 key 不存在,则此命令相当于
set key value127.0.0.1:6379> get name"hy"127.0.0.1:6379> append name append(integer) 8127.0.0.1:6379> keys *1) "name"127.0.0.1:6379> append test test(integer) 4127.0.0.1:6379> keys *1) "name"2) "test"
- 如果当前 key 不存在,则此命令相当于
strlen key获取当前key的字符串长度127.0.0.1:6379> strlen name(integer) 8
自增自减
incr key使当前key的值自动加一127.0.0.1:6379> set view 0OK127.0.0.1:6379> incr view(integer) 1
decr key使当前的 key 值自动减一127.0.0.1:6379> decr view(integer) 0
incrby key increment设置当前 key 值增加 increment 对应的数值127.0.0.1:6379> incrby view 10(integer) 10
decrby key decrement设置当前 key 值减少 decrement 对应的数值127.0.0.1:6379> decrby view 5(integer) 5
对字符串进行自增自减时,会出现错误
127.0.0.1:6379> incr name(error) ERR value is not an integer or out of range
getrange key start end表示取出当前 key 对应的字符串从 start 到 end 的值127.0.0.1:6379> get name"hyappend"127.0.0.1:6379> getrange name 0 1"hy"127.0.0.1:6379> getrange name 1 -1"yappend"
end = -1表示获取从 start 到字符串末尾的全部内容
setrange key offset value表示将 key 对应的字符串的第 offset 个字符替换为 value 对应的值127.0.0.1:6379> get name"hyappend"127.0.0.1:6379> setrange name 2 h(integer) 8127.0.0.1:6379> get name"hyhppend"
setex key time value:设置当前 key 在 time 秒后过期,值为 value127.0.0.1:6379> setex key1 30 hello # 设置 key1 的值为 value, 30s 后过期OK127.0.0.1:6379> ttl key1(integer) 26127.0.0.1:6379> get key1"hello"
- 30 秒后
127.0.0.1:6379> get key1 # 30s 后 key1 失效,无法获取(nil)
setnx key value:如果当前数据库中不存在当前 key,则将 key 和 value 存入127.0.0.1:6379> setnx mykey redis # 如果 mykey 不在当前数据库中,则插入(integer) 1127.0.0.1:6379> keys *1) "view"2) "name"3) "mykey"4) "test"127.0.0.1:6379> setnx mykey mongodb # 已经存在时,无法插入,返回 0(integer) 0127.0.0.1:6379> get mykey"redis"
- 返回值为 1 表示成功,为 0 表示当前数据库中已有该 key 存在,不能插入当前的 key 和 value
- 常用于分布式锁的设置
mset [key1 value1 ... keyn valuen]批量插入多个 key-value 键值对127.0.0.1:6379> flushdbOK127.0.0.1:6379> keys *(empty list or set)127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3OK127.0.0.1:6379> keys *1) "k3"2) "k2"3) "k1"
mget [key1 ... keyn]批量获取值127.0.0.1:6379> keys *1) "k3"2) "k2"3) "k1"127.0.0.1:6379> mget k1 k2 k31) "v1"2) "v2"3) "v3"
msetnx [key1 value1 ... keyn valuen]在当前数据库不存在列表中所需插入的 keyi 时进行插入- 若其中一个 key 已经在当前数据库中存在,则全部插入失败(是原子性操作,要么全部成功,要么全部失败)
127.0.0.1:6379> msetnx k1 v4 k5 v5(integer) 0127.0.0.1:6379> get k1"v1"127.0.0.1:6379> get k4(nil)
- 若其中一个 key 已经在当前数据库中存在,则全部插入失败(是原子性操作,要么全部成功,要么全部失败)
getset key value:组合命令,先 get 再 set127.0.0.1:6379> getset db redis(nil) # 不存在当前 key 则返回 null127.0.0.1:6379> get db"redis"127.0.0.1:6379> getset db mongodb"redis" # 如果存在值则取出原来的值,并设置新的值127.0.0.1:6379> get db"mongodb"
二、对象的相关操作
set object:id {key1:value1,...,keyn:valuen}设置一个对象以及对应的对象的值127.0.0.1:6379> set user:1 {name:xh,age:3}OK127.0.0.1:6379> get user:1"{name:xh,age:3}"
mset object:id:filed1 value1 ... object:id:filedn valuen通过 mset 为 id 对应的 object 设置属性值value 除了可以是字符串以外,还可以是数字
- 用作计数器
- 网站的多单位统计数量
- 对象缓存存储(设置对象过期时间)
