Redis value的5種類型及常見操作


Redis本身存儲就是一個hash表,實際實࣫比hash表更復一些,后續講存儲結構時會細講
Key只有String類型
Value包括String ,Set,List,Hash,Zset五中類型

STRING 可以是字符串,整數或者浮點數以及任何二進制格式的數據 對字符串或一部分進行操作,對整到和浮點數進行自增或自減操作
LIST 一個鏈表,鏈表上的每個字節都包含一個字符串 根據偏移量查找或移除某元素
SET 包含字符串的無序收集器,並且包含的每個字符串都不重復 添加,獲取,移除單個元素,是否存在,計算交集,差集,並集,從集合中取元素
HASH 包含鍵值對的無序散列表 添加,獲取,刪除多個鍵值對,獲取所有鍵值對
ZSET 字符集成員member和浮點數分值score之間的有序映射,元素的排列順序由分值的大小決定 添加獲取刪除單個元素,根據分值范圍或成員來獲取元素

數據基礎結構

string 


string SET key value [EX seconds] [PX milliseconds] [NX|XX]
EX代表設置超時時間,單位為秒
• PX代表設置超時時間,單位為毫秒
• NX代表只有key不存在才會執行
• XX代表只有key存在才會更新
• 如果成功,返回ok,失敗返回空(nil)
Get key 返回key對應的值

[root@hongquan1 src]# /usr/local/redis/src/redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> set 123 liubx1122 EX 2 //值存在2秒
OK
127.0.0.1:6379> get 123
(nil)
127.0.0.1:6379> set 123 liubx1122 EX 20
OK
127.0.0.1:6379> get 123
"liubx1122"
127.0.0.1:6379> get 123
"liubx1122"
127.0.0.1:6379> get 123
(nil)
127.0.0.1:6379> set 123 liubx1122 EX 2000
OK
127.0.0.1:6379> set 123 liubx3344 NX //不存在就更新
(nil)
127.0.0.1:6379> set 999 liubx3344 NX
OK
127.0.0.1:6379> get 999
"liubx3344"
127.0.0.1:6379> get 123
"liubx1122"
127.0.0.1:6379> set 123 99878 XX //存在就更新
OK
127.0.0.1:6379> get 123
"99878"

MGET key [key ...]
返回指定的key的所有值,如果key不存在則返回這個key的值為nil
返回對應key的值列表
127.0.0.1:6379> mget tt kk fdata1
1) (nil)
2) (nil)
3) (nil)
127.0.0.1:6379> mget tt kk fdata1 nodata
1) (nil)
2) (nil)
3) (nil)
4) (nil)

MSET key value [key value ...]
設置多個key value,如果某個key以及存在,則用新值覆蓋舊值
• 整個操作是原子操作,要么同時成功,要么同時失敗
• 如果key存在不想覆蓋的話,采用MSETNX命令
• 總是返回ok,此操作不會失敗
MSETNX key value [key value ...]
與MSET類似,但是如果只要有一個key存在,則表示結果失敗
返回值:1表示設置成功,0表示設置失敗
--append
如果key已經存在,並且值是string類型,就把新的值追加到原來值的后面
如果key不存在,就類似set的功能
返回值的字符長度
INCR key
對值進行加一操作,但是只能是值是integer類型才能操作,如果不是就會出錯
最大值為64位有符號值
返回值為加完的結果--適合做計數器(原子性)
127.0.0.1:6379> get 888
(nil)
127.0.0.1:6379> append 888 apendtest
(integer) 9
127.0.0.1:6379> get 888
"apendtest"
127.0.0.1:6379> set addt 9.9
OK
127.0.0.1:6379> incr addt
(error) ERR value is not an integer or out of range
127.0.0.1:6379> set addt1 kkk
OK
127.0.0.1:6379> incr addt
(error) ERR value is not an integer or out of range
127.0.0.1:6379> set h1 1
OK
127.0.0.1:6379> incr h1
(integer) 2
127.0.0.1:6379> incr h1
(integer) 3
127.0.0.1:6379> get h1
"3"
DECR key
對值進行減一操作,但是Ց能是值是integer類型才能操作,如果Љ是就會出錯
• 如果key不存在,會對此key賦值為0,再做操作
• 操作能操作的數被限制為64位有符號值
• 返回操作后的結果值
DECRBY key decrment
對值進行減法操作,減去decrement這個值,但是只能是值是integer類型才能操作,如果不是就會出錯
INCRBY key increment
對值進行加法法操作,加上decrement這個值,但是只能是值是integer類型才能操作,如果不是就會出錯

127.0.0.1:6379> get 111
(nil)
127.0.0.1:6379> decr 111
(integer) -1
127.0.0.1:6379> decr 111
(integer) -2
127.0.0.1:6379> get 111
"-2"
127.0.0.1:6379> decrby 111 1
(integer) -3
127.0.0.1:6379> decrby 111 -1
(integer) -2
127.0.0.1:6379> incrby 111 1
(integer) -1
127.0.0.1:6379> incrby 111 0
(integer) -1
127.0.0.1:6379> incrby 111 -2
(integer) -3

INCRBYFLOAT key increment
與INCRBY規則一樣,但是操作的是浮點數,返回操作后的結果值
GETSET key value
原子操作,設置新值的時候,把舊值返回給調用者,如果key已經存在或者key不是String類型就會報錯,此命令一般與INCR聯合使用
STRLEN key
返回key對應的值的長度,如果值不是string類型,就會報錯

127.0.0.1:6379> set fdata 1.5
OK
127.0.0.1:6379> incrbyfloat fdata 2.0
"3.5"
127.0.0.1:6379> incrbyfloat fdata 1.005
"4.505"
127.0.0.1:6379> incrbyfloat fdata 3
"7.505"
127.0.0.1:6379> set fdata1 3
OK
127.0.0.1:6379> incrbyfloat fdata 1.1
"8.605"
127.0.0.1:6379> incr mycounter
(integer) 1
127.0.0.1:6379> getset mycounter "0"
"1"
127.0.0.1:6379> get mycounter
"0"
127.0.0.1:6379> getset mycounter 1
"0"
127.0.0.1:6379> get mycounter
"1"
127.0.0.1:6379> getset mycounter 11
"1"
127.0.0.1:6379> get mycounter
"11"
127.0.0.1:6379> sadd sett 1111
(integer) 1
127.0.0.1:6379> strlen sett
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> set sett abc
OK
127.0.0.1:6379> strlen sett
(integer) 3

GETRANGE key start end
2.0版本前叫做SUBSTR,返回字符串類型值的子串,Start和end的值可以取負數,表示倒數第幾個,-1表示最后一個字符
返回區間字符串
GETBIT key offset
可以獲得一個字符串類型鍵指定位置的二進制位的值(0或1),索引從0開始
SETBIT key offset value
設置字符串類型鍵指定位置的二進制位的值,返回值是該位置的舊值
Bitcount
可以獲得字符串類型鍵中值是1的二進制位個數

127.0.0.1:6379> set k1 123456
OK
127.0.0.1:6379> get k1
"123456"
127.0.0.1:6379> getrange k1 0 3
"1234"
127.0.0.1:6379> getrange k1 -3 -1
"456"
127.0.0.1:6379> set k2 abcde
OK
127.0.0.1:6379> getrange k2 2 3
"cd"
127.0.0.1:6379> getbit k2 1
(integer) 1
127.0.0.1:6379> getbit k2 3
(integer) 0
127.0.0.1:6379> getbit k1 1
(integer) 0
127.0.0.1:6379> getbit k1 2
(integer) 1
127.0.0.1:6379> setbit k1 2 0
(integer) 1
127.0.0.1:6379> getbit k1 2
(integer) 0
127.0.0.1:6379> get k1
"\x1123456"
127.0.0.1:6379> bitcount k1 1
(error) ERR syntax error
127.0.0.1:6379> bitcount k1
(integer) 20
127.0.0.1:6379> bitcount k2
(integer) 17

Lists

----評論
LPUSH key value [value ...]
把所有的值從list的頭部插入,如果key不存在就創建一個空的隊列,如果key對值的value不是list類型,則會出現錯誤
元素從左到右依次插入,返回list的長度
LPUSHX key value
從list頭部插入一個值,當key不存在時,不會產生插入動作,返回list的長度
LPOP key
移除list的第一個節點,並返回節點數據

127.0.0.1:6379> lpush list1 11 22 33 55 66 11
(integer) 6
127.0.0.1:6379> get list1
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> lpop 3
(nil)
127.0.0.1:6379> lpop list1
"11"
127.0.0.1:6379> lpop list1
"66"
127.0.0.1:6379> lpop list1
"55"
127.0.0.1:6379> lpush list2 data1 data2
(integer) 2
127.0.0.1:6379> lpush list2 data3
(integer) 3
127.0.0.1:6379> lpop list3
(nil)
127.0.0.1:6379> lpushx list2 data4
(integer) 4
127.0.0.1:6379> lpushx list3 data2
(integer) 0
127.0.0.1:6379> lpop list3
(nil)
127.0.0.1:6379> lpushx list3 data1
(integer) 0
127.0.0.1:6379> lpushx list3 data2
(integer) 0
127.0.0.1:6379> lpushx list3 data3
(integer) 0
127.0.0.1:6379> lpop list3
(nil)
----
127.0.0.1:6379> lrange list1 0 10
1) "33"
2) "22"
3) "11"
127.0.0.1:6379> lpush list1 00
(integer) 4
127.0.0.1:6379> lrange list1 0 10
1) "00"
2) "33"
3) "22"
4) "11"
127.0.0.1:6379> lpop list1
"00"
127.0.0.1:6379> lrange list1 0 10
1) "33"
2) "22"
3) "11"
---
BLPOP key [key ...] timeout
以阻塞的方式從上key面移除並返回第一個值,只移除和返回第一個非空的key
Timeout的單位是秒,如果為0,則表示一直阻塞
只要list的長度為0或者key不存在就會阻塞
當key是多個時,比如blopo key1 key2,則只要有一個key對應的list不是非空,則不會阻塞
返回值依次包含key 彈出的值 阻塞的時長,超時時,如果還沒有值可以返回,則返回nil
LLEN key
返回對應key的list中值的數量,如果key不存在或者list為空,則返回0

127.0.0.1:6379> lpop list3
(nil)
127.0.0.1:6379> blpop list3 10
(nil)
(10.09s)
127.0.0.1:6379> blpop list3 20
(nil)
(20.06s)
127.0.0.1:6379> blpop list1 10
1) "list1"
2) "33"
127.0.0.1:6379> blpop list1 list2 10
1) "list1"
2) "22"
127.0.0.1:6379> blpop list1 list3 10
1) "list1"
2) "11"
127.0.0.1:6379> llen list1
(integer) 0
127.0.0.1:6379> llen list2
(integer) 4

RPUSH key value [value ...]
把所有的值從list的尾部插入,如果key不存在就創建一個空的隊列
如果key對應的value不是list類型,則會出現錯誤
元素從左到右依次插入,返回list的長度
RPUSHX key value
從list尾部插入一個值,當key不存在時,不會產生插入動作,返回list的長度
RPOP key
移除list的最后一個節點,並返回節點數據或者nil

127.0.0.1:6379> rpush l1 1 3 5 7 9
(integer) 5
127.0.0.1:6379> rpushx l2 1 2 3
(error) ERR wrong number of arguments for 'rpushx' command
127.0.0.1:6379> rpushx l2 1
(integer) 0
127.0.0.1:6379> rpop l1
"9"
127.0.0.1:6379> rpop l1
"7"

BRPOP key [key ...] timeout
類似於blpop
RPOPLPUSH source destination
此操作是一個原子操作
從source對應的key的list里面的尾部移除一個值,並且加入到destination指定的list的頭部
如果source的list存在在,則返回nil,但是不會做任何操作
如果source和destination是一樣的,則等於把list的尾部數據插入到頭部
返回被彈出和插入的數據
BRPOPLPUSH source destination timeout
功能與rpoplpush相似,但是當source為空時,將會進行阻塞

127.0.0.1:6379> lpush source 11 22 33
(integer) 3
127.0.0.1:6379> rpoplpush source dest
"11"
127.0.0.1:6379> llen dest
(integer) 1
127.0.0.1:6379> lpop dest
"11"
127.0.0.1:6379> llen dest
(integer) 0
127.0.0.1:6379> rpoplpush dest source
(nil)

LINDEX key index
返回key指定的隊列中位置為index的值
從0開始,負數表示從后面開始算
LINSERT key BEFORE|AFTER pivot value
把value的值插入key對應的list中去,位置在pivot這個值的前面(before)或者后面(after)
如果key不存在,則不會產生任何操作
如果pivot對應的值不存在則返回-1,否則就返回插入后list的長度
LRANGE key start stop
返回一個區間的值,從list的頭(左)到尾(右)
如果start大於list的長度,就會返回空
如果stop大於list的長度,則以list最后一個值尾准

127.0.0.1:6379> llen dest
(integer) 0
127.0.0.1:6379> lpush dest 11
(integer) 1
127.0.0.1:6379> lpush dest 22 33
(integer) 3
127.0.0.1:6379> linsert dest before 11 44
(integer) 4
127.0.0.1:6379> lrange dest 0 4
1) "33"
2) "22"
3) "44"
4) "11"
127.0.0.1:6379> linsert dest before 55 66
(integer) -1
127.0.0.1:6379> lrange dest 0 6
1) "33"
2) "22"
3) "44"
4) "11"

LREM key count value
刪除值等於value的count個元素
• 如果count大於0,則從頭到尾數
• 如果count小於0,則從尾到頭數
• 如果count等於0,則刪除所有的值等於value的元素
LTRIM key start stop
對key指定的list進行裁剪,即取子集
• 如果start>list的長度或者start>end,將會返回一個空列表,然后導致key被刪除
• 如果end大於list的長度,則取list的長度
• 執行完成返回ok
127.0.0.1:6379> rpush mylist "hello"
(integer) 1
127.0.0.1:6379> rpush mylist "hello"
(integer) 2
127.0.0.1:6379> rpush mylist "foo"
(integer) 3
127.0.0.1:6379> rpush mylist "hello"
(integer) 4
127.0.0.1:6379> lrem mylist -2 "hello"
(integer) 2
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "foo"
127.0.0.1:6379> lpush dest 11 22 33 44
(integer) 8
127.0.0.1:6379> ltrim dest 0 2
OK
127.0.0.1:6379> exists dest
(integer) 1
127.0.0.1:6379> lrange dest 0 10
1) "44"
2) "33"
3) "22"
127.0.0.1:6379> llen dest
(integer) 3
127.0.0.1:6379> ltrim dest 5 10
OK
127.0.0.1:6379> exists dest
(integer) 0
127.0.0.1:6379> llen dest
(integer) 0

LSET key index value
修改key對應的list中,位置為index的元素的值為value,當index超過list的返回,將會出現錯誤
127.0.0.1:6379> rpush my "one"
(integer) 1
127.0.0.1:6379> rpush my "two"
(integer) 2
127.0.0.1:6379> rpush my "three"
(integer) 3
127.0.0.1:6379> lset my 0 "four"
OK
127.0.0.1:6379> lset my -2 "five"
OK
127.0.0.1:6379> lrange my 0 -1
1) "four"
2) "five"
3) "three"

Keys

DEL key [key ...]
刪除指定的key,如果key不存在,對此key的操作將會忽略,返回被刪除的key
DUMP key
按照rdb的؂儲格式把指定的key的值,序列化並返回給客戶端,此序列化值里面不包括ttl信息
序列化的值中包含校驗碼,不同版本的rdb實࣫可能؂在差異,所以此處序列化的數據可能不對
Key不存在就返回nil

RESTORE key ttl serialized-value [REPLACE]
把通過dump命令序列化的值再存進去,如果沒有帶replace,且key已經存在,會出現錯誤
會檢查校驗值ͧchecksumͨ,如果不滿足會返回錯誤,成功返回ok
EXISTS key [key ...]
判斷key是否存在,如果存在,則返回值加1
從3.03版本開始支持多個key,以前的版本只支持一個
如果key重復,則返回值會重復判斷和加1
127.0.0.1:6379> get 123
"99878"
127.0.0.1:6379> get 456
(nil)
127.0.0.1:6379> exists 123 456
(integer) 1
127.0.0.1:6379> exists 123
(integer) 1
127.0.0.1:6379> exists 123 123 456
(integer) 2

EXPIRE key seconds
設置key的超時時間,單位是秒ͺ當達到超時時間后,key會被刪除
這個超時時間只能被DEL SET GETSET和*STORE命令修改或者改變,其它命令並不會改變超時設置或者超時時長
可以通過命令PERSIST把超時設置取消
當key被RENAME命令修改后,超時設置的特性還是不會改變
設置成功返回1,key不存在或者超時時間設置失敗返回0
127.0.0.1:6379> set tt data1
OK
127.0.0.1:6379> get tt
"data1"
127.0.0.1:6379> expire tt 10
(integer) 1
127.0.0.1:6379> get tt
"data1"
127.0.0.1:6379> get tt
"data1"
127.0.0.1:6379> get tt
(nil)
127.0.0.1:6379> set tt data1
OK
127.0.0.1:6379> expire tt 10
(integer) 1
127.0.0.1:6379> set tt data2
OK
127.0.0.1:6379> get tt
"data2"
127.0.0.1:6379> get tt
"data2"

EXPIREAT key timestamp
設置key的超時時間,與EXPIRE相似,但是設置的是精確時間
設置成功返回1,key不存在或者超時時間設置失敗返回0
Keys pattern
返回符合pattern的所有的key,在生產環境盡量少用,除非數據比較少,因為此操作會影響性能
可以用scan或者sets來達到查找key的業務需求
• *代表任意؁符,?代表單個؁符,[ae]代碼a或者e
• [^e]代表不等於e,[a-d]代表a,b,c,d
127.0.0.1:6379> keys [a-d]
(empty list or set)
127.0.0.1:6379> keys [d-k]
(empty list or set)
127.0.0.1:6379> set a 11
OK
127.0.0.1:6379> set b 22
OK
127.0.0.1:6379> keys [a-d]
1) "b"
2) "a"
127.0.0.1:6379> set c 33
OK
127.0.0.1:6379> set d 44
OK
127.0.0.1:6379> keys [a-d]
1) "b"
2) "a"
3) "d"
4) "c"
127.0.0.1:6379> keys *
1) "b"
2) "h1"
3) "a"
4) "d"
5) "111"

ttl key
返回key對應的超時時間,還剩余多少時間
如果key不存在,返回-2,如果key還沒有設置超時時間,返回-1
pttl key
與ttl能一致,但是返回的是毫秒
127.0.0.1:6379> set dd 111 ex 100
OK
127.0.0.1:6379> ttl dd
(integer) 97
127.0.0.1:6379> pttl dd
(integer) 90940
127.0.0.1:6379> ttl dd
(integer) -2
127.0.0.1:6379> ttl d
(integer) -1

SCAN

cursor [MATCH pattern] [COUNT count]--類似rdbms的分頁查詢
基於游標的方式返回當前數據庫的key,因為每次返回的數據不多,不會阻塞服務器,所以可以在生產環境中使用
Cursor表示的是游標的位置,一般從0開始,返回的數據中第一行代表的就是下一次游標的位置,當返回的下一行游標是
0時,代表本次迭代全部完成ͺ此游標值不是一個連續標准值,比如5,10,15是連續標准
MATCH pattern類似keys中模式一樣,返回指定模式的迭代游標
Count代表每次迭ї返回的數據條數,默認是10,但是它只是一個提示,實現時並沒有嚴格保證,實際返回的值可能會
比這個值多一些,但是不會多太多
與keys或者SMEMBERS命令相比,scan返回的結果不穩定,在執行迭代的過程中,如果key發生變化,比如刪除或者新
增,則返回的結果可能؂在一下幾個問題:
– 可能會返回重復的key,所以,使用此命令時,業務系統需要判斷重復
– 如果在迭代過程中,有key被刪除了,但是在迭ї完成前沒有被添加進來,則此key並不會出現在迭代中
127.0.0.1:6379> scan 0
1) "22"
2) 1) "b"
2) "h1"
3) "c"
4) "addt"
5) "111"
6) "a"
7) "dest"
8) "sett"
9) "fdata1"
10) "fdata"
127.0.0.1:6379> scan 20
1) "21"
2) 1) "a"
2) "dest"
3) "sett"
4) "fdata1"
5) "fdata"
6) "mycounter"
7) "list2"
8) "source"
9) "my"
10) "999"
127.0.0.1:6379> scan 0 match 1*
1) "22"
2) 1) "111"
127.0.0.1:6379> scan 20 match 1*
1) "21"
2) (empty list or set)

hashes

HSET key field value
Key帶表的是一個hash表,field為hash表的key,value為hash表中key對應的value
如果key不存在,則創建一個key及對應的hash表
如果field存在,則把value覆蓋原來的值
如果field是新加入,並且設置成功,則返回1ͺ如果field已經存在,成功更新舊值,則返回0
HMSET key field value [field value ...]
與hset類似,但是一次設置多個值,成功返回ok
127.0.0.1:6379> hmset map1 name libux age 33
OK
127.0.0.1:6379> get map1
(error) WRONGTYPE Operation against a key holding the wrong kind of value
127.0.0.1:6379> hkeys map1
1) "name"
2) "age"
127.0.0.1:6379> hlen map1
(integer) 2
127.0.0.1:6379> hsetnx map1 name libux123
(integer) 0
127.0.0.1:6379> hsetnx map1 other nxtest
(integer) 1
127.0.0.1:6379> hkeys map1
1) "name"
2) "age"
3) "other"

HSETNX key field value
Key代表的是一個hash表,field為hash表的key,value為hash表中key對應的value
• 當field不存在時才設置
• 如果field不存在,則設置值,返回1ͺ如果field存在,則返回0,不做任何操作
HKEYS key
獲取key對應的map的所有key,返回key的列表
HLEN key
獲取key對應的map的field的數量

HGET key field
獲取某個field的值,Key代表的是一個hash表,field為hash表的keyͺ如果key不存在或者field不存在,返回nil,否則返回值
HMGET key field [field ...]
獲取key對應的map的多個值,如果key不存在或者field不存在,返回nil,否則返回值列表
HVALS key
返回key對應的map的所有值列表
HSTRLEN key field
返回field對應的值的長度,當key不存在或者field不存在,則返回0
127.0.0.1:6379> hget map1 name
"libux"
127.0.0.1:6379> hmget map1 name age
1) "libux"
2) "33"
127.0.0.1:6379> hvals map1
1) "libux"
2) "33"
3) "nxtest"
127.0.0.1:6379> hlen map1
(integer) 3

HDEL key field [field ...]
刪除key對應的map的field,可以原子性操作刪除多個field,返回刪除的值的數量
HEXISTS key field
判斷key指定的map中是否存在field屬性,如果key不存在或者field不存在則返回0,否則返回1
HGETALL key
返回key對應的map的所有key-value對,按照key然后下一行是value的形式展示
127.0.0.1:6379> hmset map1 del1 del1data del2 deldata2
OK
127.0.0.1:6379> hexits map1 del1
(error) ERR unknown command 'hexits'
127.0.0.1:6379> hexists map1 del1
(integer) 1
127.0.0.1:6379> hexists map1 del3
(integer) 0
127.0.0.1:6379> hgetall map1
1) "name"
2) "libux"
3) "age"
4) "33"
5) "other"
6) "nxtest"
7) "del1"
8) "del1data"
9) "del2"
10) "deldata2"
127.0.0.1:6379> hdel map1 del2
(integer) 1
127.0.0.1:6379> hgetall map1
1) "name"
2) "libux"
3) "age"
4) "33"
5) "other"
6) "nxtest"
7) "del1"
8) "del1data"

HINCRBY key field increment
對field指定的值加上increment,但是值必只是integer類型,范圍在64位有符號的數,返回增加后的結果
HINCRBYFLOAT key field increment
對field指定的值加上increment,但是值必只是float類型,范圍在64位有符號的數,如果key不存在或者field不存在則返回0,否則返回1
HSCAN key cursor [MATCH pattern] [COUNT count]
與scan類似,但是迭代的是key對應的map里面的值
127.0.0.1:6379> hscan map1 0 count 5
1) "0"
2) 1) "name"
2) "libux"
3) "age"
4) "33"
5) "other"
6) "nxtest"
7) "del1"
8) "del1data"
127.0.0.1:6379> hincrby map1 age 2
(integer) 35
127.0.0.1:6379> hget map1 age
"35"
127.0.0.1:6379> hset map1 money 100.1
(integer) 1
127.0.0.1:6379> hincrbyfloat map1 money 18.3
"118.39999999999999999"
127.0.0.1:6379> hget map1 money
"118.39999999999999999"
127.0.0.1:6379> hincrbyfloat map1 money -2.5
"115.89999999999999999"


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM