1.设置值
set {key name} {value} #设置值
2.获得值
get {key name}
key * #获取所有key
3. expire {key name} {时间常量} #过期时间
exists {key name} #显示值是否存在
4.尾部追加
append {key name} #如果当前key不存在,就相当于set key
5.获取值长度
strlen {keyname}
6.值增加/减命令
incr #自增1 decr #减少
incr {key name} {value} 增加
decr {key name} {value} 减少
7.range 范围
7.1 getrange 截取字符串(get range)
getrange {key name} {start} {end} #起始位置和结束位置,当结束位置为-1时相当与get方法
7.2 setrange 修改字符串(set range)
setrange {key name} {start} {value} #已什么起始位置基础去修改字符串
8. setex (set with expire) #设置过期时间
格式:setex {key name} {value} {时间常量}
例子:setc key1 nnn 20 #设置键名为key1值为nnn的数据过期时间是20(查看过期剩余时间用 ttl {key name}指令查看)
9. setnx (set if not exist) #不存在时在设置(在分布式锁中会常常使用)
格式:setnx {key name} {value}
注意:不存在时会return一个新版本号,失败则返回当前版本号如Integer 0
10. mset #批量设置值
格式:mset {key name} {value} {key name} {value} {key name} {value} ~~~~
11.mget # 批量获取值
格式:mget {key name} {key name} {key name} ~~~~
注意:批量获取和设置操作是原子性操作,要么都成功,要么都失败
12.对象属性设置
格式1:set {key name} {json格式}
例子:127.0.0.1:6379> set user:1 {name:gou,age:18} #设置一个key为user:1的对象,vlaue用json格式存储
重点:在redis中设置key值时,允许要’ : ‘来设置树级结构
也可以用批量设置的方式存储对象数据
格式: mset user:3:name cl user:3:age:18
mget user:3:name user:3:age]
注意:两者的区别,格式1时以user:1作为key,value都被json格式封装在里面
格式2,就是按照批量处理的方式去get和set的,只不过设置了树级(层级)结构了
13.getset命令 #先get后set(更新操作)
格式:getset {key name} {value} #如果当前数据库没有指定的key那么就返回'nil'如果有就覆盖原有的值,相当于是一个更新的操作
拓展:1.CAS,比较并交换,与getset相似,数据结构是相通的,无锁算法实现的同步,即是一个原子性的操作
2.自旋锁,就是一个工作机制与cas相似的同步锁机制,即当一个线程获取锁时,该锁已经被其他锁占用了,那么当前线程会进入忙循环状态(相当于while循环),不断的去询问锁是否被释放,知道获取成功才会跳出循环状态;