1. 基本命令
keys * #查看当前库所有k
set k v #设置k, v
get k #获取k
expire k 10 #设置key过期时间 单位秒
ttl k #查看k的剩余时间
select 0 #切换数据库 0/16 默认16个库 配置文件中配置
flushdb #清空当前库k
flushall #清空所有库k
move k #移除k
exists k,k1 #查询k是否存在
type k #查询k对应的v存储类型
2. String类型
append k v #追加字符串,如果k不存在就相当添加
strlen k #获取字符串长度
-----------------------------
incr k #原子加1
decr k #原子减1
incrby k 10 #原子加10 10是步长 可用在浏览量
decrby k 10 #原子减10 10是步长
-----------------------------
getrange k 0 3 #截取字符串 从0位置-3位置 4个字符串
getrange k 0 -1 #去字符串所有内容
-----------------------------
setrange k 1 xxx #从下标位1开始替换后面的内容
-----------------------------
setex k v 60 #设置k,v,过期时间
-----------------------------
setnx k v #k不存在再设置值(常在分布式锁中使用)
-----------------------------
mset k1 v1 k2 v2 k3 v3 #批量设置k,v
msetnx k1 v1 k4 v4 #存在的key,值就不设置了
mget k1 k2 k3 #获取多个key值
-----------------------------
getset k v #先获取在设置, CAS 原子操作
e.g
114.116.230.154:6397> getset db redis
(nil)
114.116.230.154:6397> get db
"redis"
114.116.230.154:6397> getset db mongodb
"redis"
114.116.230.154:6397> get db
"mongodb"
3. List
list 可以用来实现队列、栈,所有的命令都是以L开头。
#从左向右添加数据,如果集合不存在创建集合
114.116.230.154:6397> lpush list one #lpush:从左向右添加,后添加的总是在头部0的位置(栈)
(integer) 1
114.116.230.154:6397> lpush list two
(integer) 2
114.116.230.154:6397> lpush list three
(integer) 3
114.116.230.154:6397> lrange list 0 -1 #获取list中的所有值
1) "three"
2) "two"
3) "one"
114.116.230.154:6397> lrange list 0 1 #获取list中的区间值,如果获取第一个值 lrange list 0 0
1) "three"
2) "two"
------------------------------------------
#从右向左添加数据,如集合不存在添加集合
114.116.230.154:6397> rpush list right #rpush:从右向左添加
(integer) 4
114.116.230.154:6397> lrange list 0 -1
1) "three"
2) "two"
3) "one"
4) "right"
------------------------------------------
#从左边或者右边弹出元素
114.116.230.154:6397> lrange list 0 -1
1) "three"
2) "two"
3) "one"
4) "right"
114.116.230.154:6397> lpop list #弹出左边第一个元素,并移除
"three"
114.116.230.154:6397> lrange list 0 -1
1) "two"
2) "one"
3) "right"
114.116.230.154:6397> rpop list #弹出右边第一个元素,并移除
"right"
114.116.230.154:6397> lrange list 0 -1
1) "two"
2) "one"
# lpush + lpop(栈),lpush + rpop(队列)
-----------------------------------------
#获取集合中指定下标元素
114.116.230.154:6397> lrange list 0 -1 #展示list集合中所有元素
1) "two"
2) "one"
114.116.230.154:6397> lindex list 0 #根据list集合下标获取集合元素
"two"
114.116.230.154:6397> lindex list 1
"one"
-----------------------------------------
#获取集合长度
114.116.230.154:6397> lrange list 0 -1
1) "two"
2) "one"
114.116.230.154:6397> llen list #获取list集合长度
(integer) 2
-----------------------------------------
#移除集合中的指定元素值,并指定移除几个
114.116.230.154:6397> lpush list one two three three #从左向右添加值
(integer) 4
114.116.230.154:6397> lrange list 0 -1
1) "three"
2) "three"
3) "two"
4) "one"
114.116.230.154:6397> lrem list 1 one #移除指定值one,并移除1个
(integer) 1
114.116.230.154:6397> lrange list 0 -1
1) "three"
2) "three"
3) "two"
(0.53s)
114.116.230.154:6397> lrem list 3 three #移除指定值three,并移除3个,但实际就2个所以都移除了。
(integer) 2
114.116.230.154:6397> lrange list 0 -1
1) "two"
---------------------------------------
#结合修剪,截取指定下标 n~m 的元素包含n,m的内容
114.116.230.154:6397> lrange mylist 0 -1
1) "h5"
2) "h4"
3) "h3"
4) "h2"
5) "h1"
114.116.230.154:6397> ltrim mylist 1 3 #ltrim:集合修剪操作,只保留下标1~3的元素
OK
114.116.230.154:6397> lrange mylist 0 -1
1) "h4"
2) "h3"
3) "h2"
---------------------------------------
#将一个集合的最后一个元素pop,push到另一个集合中
114.116.230.154:6397> lrange mylist 0 -1
1) "h6"
2) "h5"
3) "h4"
4) "h3"
5) "h2"
114.116.230.154:6397> rpoplpush mylist newlist #从mylist最后一个元素移除,到新列表newlist
"h2"
114.116.230.154:6397> lrange newlist 0 -1
1) "h2"
114.116.230.154:6397> lrange mylist 0 -1
1) "h6"
2) "h5"
3) "h4"
4) "h3"
---------------------------------------
#指定下标赋值
114.116.230.154:6397> lrange mylist 0 -1
1) "h6"
2) "h5"
3) "h4"
4) "h3"
114.116.230.154:6397> lset list 0 hdx #指定下标赋值list不存在报错,所以先lpush或rpush
(error) ERR no such key
114.116.230.154:6397> lset mylist 1 h7 #向mylist集合的下标 1 处赋值 h7, 如下标不存在也会报错
OK
114.116.230.154:6397> lrange mylist 0 -1 #结果原下标 1 处的 h5 被覆盖
1) "h6"
2) "h7"
3) "h4"
4) "h3"
---------------------------------------
#指定内容元素前or后插入新元素
114.116.230.154:6397> lrange mylist 0 -1
1) "h6"
2) "h7"
3) "h4"
4) "h3"
114.116.230.154:6397> linsert mylist before h7 hdx #向mylist集合中h7元素前面插入hdx元素
(integer) 5
114.116.230.154:6397> lrange mylist 0 -1
1) "h6"
2) "hdx"
3) "h7"
4) "h4"
5) "h3"
# 操作类似一个连表 [before] Node [after]
小结
底层实现相当一个连表,比如lpush是向头节点插入数据,rpush是向尾节点插入数据。可以向某个具体节点插入数据 比如 linsert。
可用用作队列,栈