redis五大数据类型 hdx 1. 基本命令 2. String类型 3. List 4. set

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。

可用用作队列,栈

4. set

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章