通過上兩篇的介紹,我們的redis伺服器基本跑起來。db都具有最基本的CRUD功能,我們沿著這個脈絡,開始學習redis豐富的資料結構之旅,當然先從最簡單且常用的string開始。
1、新增
a)set
文法:set key value
解釋:把值value賦給key,如果key不存在,新增;否則,更新
[root@xsf001 ~]# redis-cli redis 127.0.0.1:6379> set user.1.name zhangsan #設定user.1.name 為zhangsanOKredis 127.0.0.1:6379> set user.name 45 #設定user.1.name 為45OK
b)setnx
文法:setnx key value
解釋:只insert不update,即,僅僅key不存在時,則設定key的值為value,並返回1,否則返回0 。setnx 是set if not exists 的縮寫
redis 127.0.0.1:6379> setnx user.1.name zhangsan #user.1.name已經存在,則返回0(integer) 0redis 127.0.0.1:6379> setnx user.2.name zhangsan #user.2.name不存在,則設定(integer) 1
c)setex
文法: setex key seconds value
解釋:設定key的到期時間和值。到期時間seconds單位是秒。設定到期時間和值是原子操作,如果redis僅僅當做緩衝,這個很命令很有用。
redis 127.0.0.1:6379> setex user.2.age 2 14 #把user.2.age 的值設14 並且2秒後到期失效OKredis 127.0.0.1:6379> get user.2.age #失效前"14"redis 127.0.0.1:6379> get user.2.age #失效後(nil)
d)mset
文法:mset key value [key value ...]
解釋:同時設定多個key-value
redis 127.0.0.1:6379> mset user.4.name lisi user.4.age 34 #設定user.4.name=lisi,user.4.age=34OKredis 127.0.0.1:6379> get user.4.name"lisi"redis 127.0.0.1:6379> get user.4.age"34"
e)msetnx
文法:msetnx key value [key value ...]
解釋:所有key都不存在才執行set操作
redis 127.0.0.1:6379> msetnx user.4.name lisi user.4.age 34 #key 都設定過,無法再次set(integer) 0redis 127.0.0.1:6379> msetnx user.4.name lisi user.4.std 3 #key user.4.name 曾設定過,無法再次設定(integer) 0redis 127.0.0.1:6379> msetnx user.4.tech lisi user.4.std 3 #key都沒有設定過,可以再次設(integer) 1
2、查詢
a)get
文法:get key
解釋:擷取key所set的值
redis 127.0.0.1:6379> get user.4.name #擷取user.4.name 的值"lisi"redis 127.0.0.1:6379> get user.4.age"34"redis 127.0.0.1:6379> get user.4.tech"lisi"redis 127.0.0.1:6379> get user.4.std"3"
b)mget
文法: get key [key]
解釋:批量擷取key的值。程式一次擷取多個值,可以減少網路連接損耗。
redis 127.0.0.1:6379> mget user.4.name user.4.age user.4.std #批量擷取存在key的值1) "lisi" #user.4.name的值2) "34" #user.4.age 的值3) "3" #user.4.std 的值redis 127.0.0.1:6379> mget user.4.name user.4.age user.4.std user.4.fri #key user.4.fri 不存在仍然可以返回1) "lisi"2) "34"3) "3"4) (nil) #user.4.fri 的值
c)getrange
文法:getrange key star end
解釋:擷取儲存在key中value的字串。字串的截取有star和end決定,字串的第一個字元編號是0,第二個是1,一次類推;如果是負數,-1是最後一個字元,-2是倒數第二個字元,一次類推。
redis 127.0.0.1:6379> get user.4.name"lisi"redis 127.0.0.1:6379> getrange user.4.name 0 3 # 0 表示開始"lisi"redis 127.0.0.1:6379> getrange user.4.name 1 2"is"redis 127.0.0.1:6379> getrange user.4.name 1 -2 #-2 表示倒數第二"is"redis 127.0.0.1:6379> getrange user.4.name -1 -2 # end 》 start""redis 127.0.0.1:6379> getrange user.4.name 1 66 #end 》 值的長度"isi"
3、修改
a)getset
文法:getset key value
解釋:設定key的值,並返回key的舊值。
redis 127.0.0.1:6379> get user.4.name #存在的key"lisi"redis 127.0.0.1:6379> getset user.4.name wangwu #把存在的user.4.name設定為wagnwu"lisi"redis 127.0.0.1:6379> get user.4.name "wangwu"redis 127.0.0.1:6379> get user.5.name #不存在的key(nil)redis 127.0.0.1:6379> getset user.5.name lisi(nil)redis 127.0.0.1:6379> get user.5.name"lisi"
b) append
文法:append key value
解釋:key存在,在舊值的後面追加value;key不存在,直接set
redis 127.0.0.1:6379> get user.4.name #存在的key"wangwu"redis 127.0.0.1:6379> append user.4.name 01(integer) 8redis 127.0.0.1:6379> get user.4.name"wangwu01"
redis 127.0.0.1:6379> get user.6.name #不能存在的key(nil)redis 127.0.0.1:6379> append user.6.name jim(integer) 3redis 127.0.0.1:6379> get user.6.name"jim"
c)setrange
文法:setrange key offset value
解釋:用value重寫key值的一部分,位移量由offset指定
redis 127.0.0.1:6379> get user.4.name #key存在"wangwu01"redis 127.0.0.1:6379> setrange user.4.name 0 lisi(integer) 8redis 127.0.0.1:6379> get user.4.name"lisiwu01"redis 127.0.0.1:6379> setrange user.4.name 9 lisi # offset 》字串長度(integer) 13redis 127.0.0.1:6379> get user.4.name"lisiwu01\x00lisi"redis 127.0.0.1:6379> setrange user.4.name 8 lisi(integer) 13redis 127.0.0.1:6379> get user.4.name"lisiwu01lisii"redis 127.0.0.1:6379> get user.6.std #key 不存在(nil)redis 127.0.0.1:6379> setrange user.6.std 0 3(integer) 1redis 127.0.0.1:6379> get user.6.std"3"
d)incr
文法:incr key
解釋:key中如果儲存的是數字,則可以通過incr遞增key的值,返回遞增後的值。如果key不能存在,視為初始值為0
redis 127.0.0.1:6379> get user.7.age #key不存在 ,初始值視為0,(nil)redis 127.0.0.1:6379> incr user.7.age (integer) 1redis 127.0.0.1:6379> get user.7.age"1"redis 127.0.0.1:6379> incr user.7.age(integer) 2
e)incrby
文法:incrby key increment
解釋:用指定的步長增加key儲存的數字。如果步長increment是負數,則減
redis 127.0.0.1:6379> get user.7.age"3"redis 127.0.0.1:6379> incrby user.7.age 15 #增加15(integer) 18redis 127.0.0.1:6379> get user.7.age"18"redis 127.0.0.1:6379> incrby user.7.fri 18 #key不能存在,原值視為0(integer) 18redis 127.0.0.1:6379> get user.7.fri"18"redis 127.0.0.1:6379> incrby user.7.age -1 #步長為負(integer) 17redis 127.0.0.1:6379> get user.7.age"17"
f)decr
文法:decr key
解釋:遞減key儲存的數字,如果key不存在,初始值視為0
redis 127.0.0.1:6379> get user.7.age"17"redis 127.0.0.1:6379> decr user.7.age(integer) 16redis 127.0.0.1:6379> decr user.7.num #key 不存在,初始值視為0(integer) -1redis 127.0.0.1:6379> decr user.7.num(integer) -2
g)decrby
文法:decrby key decrement
解釋:用指定的步長遞減key的值,如果步長decrment是負值,則遞增
redis 127.0.0.1:6379> decrby user.7.num 4 #遞減(integer) -6redis 127.0.0.1:6379> decrby user.7.num -9 #負值,遞增(integer) 3
注意:遞增遞減系列的函數,只能對儲存的是數位key操作,不能是字串
4)刪除
文法:del key [key]
解釋:刪除指定的key,返回刪除key的個數
redis 127.0.0.1:6379> del user.7.num(integer) 1redis 127.0.0.1:6379> get user.7.num(nil)redis 127.0.0.1:6379> del user.7.age user.7.fri #刪除多個key(integer) 2redis 127.0.0.1:6379> mget user.7.age user.7.fri1) (nil)2) (nil)
5)其他
文法:strlen key
解釋:擷取key中所儲存值的長度
redis 127.0.0.1:6379> get user.1.name"45"redis 127.0.0.1:6379> strlen user.1.name #user.1.name 長度(integer) 2redis 127.0.0.1:6379> strlen user.8.name #key不存在(integer) 0
通過上面的大量demo,對string的操作基本總結完畢。今天就到這裡吧。
更多資訊,請參考:http://redis.io/commands#string
如果感覺對您有所協助,請粉新浪微博:http://weibo.com/lovecoder