redis數據類型操作

redis數據類型操作 原文地址:http://www.ttlsa.com/archives/189
redis的安裝配置參見: http://www.ttlsa.com/archives/184
一.value
exists key:測試指定的key是否存在,1表示存在,0表示不存在
del key1 key2 ...keyN: 刪除指定的key
type key: 返回指定key的value類型,返回none表示不存在key,string字符類型,list鏈表類型,set無序集合類型等
keys pattern: 返回匹配的所有key
randomkey: 從當前數據庫中隨機選擇一個key
rename oldkey newkey: 重命名key,如果newkey存在將會被覆蓋
rename oldkey newkey: 重命名key,如果newkey存在則失敗
dbsize: 返回當前數據庫中key的數量
expire key seconds: 指定key過期時間,單位是s
ttl key: 返回設置過期時間的key的剩餘過期秒數,-1表示key不存在或沒有設置過期時間
select db_index:  通過索引選擇數據庫,默認連接的數據庫所有是0,默認數據庫數是16個。返回1表示成功,0失敗
move key db-index  將key從當前數據庫移動到指定數據庫。返回1成功。0 如果key不存在,或者已經在指定數據庫中
flushdb:刪除當前選擇數據庫中的所有key
flushall:刪除所有數據庫中的所有key

操作實例如下:
$ ./redis-cli -h 127.0.0.1 -p 6379 -a "redis"   //登錄到redis  -a是密碼
redis 127.0.0.1:6379> exists a
(integer) 1
redis 127.0.0.1:6379> type a
string
redis 127.0.0.1:6379> get key2
"10"
redis 127.0.0.1:6379> get a
"11111"
redis 127.0.0.1:6379> rename a key2
OK
redis 127.0.0.1:6379> exists a
(integer) 0
redis 127.0.0.1:6379> get key2
"11111"
redis 127.0.0.1:6379> dbsize
(integer) 4
redis 127.0.0.1:6379> expire key2 100000000
(integer) 1
redis 127.0.0.1:6379> ttl key2
(integer) 99999996
redis 127.0.0.1:6379> select 3
OK
redis 127.0.0.1:6379[3]> select 0
OK
redis 127.0.0.1:6379> move key2 3
(integer) 1
redis 127.0.0.1:6379> select 3
OK
redis 127.0.0.1:6379[3]> dbsize
(integer) 1
redis 127.0.0.1:6379[3]> get key2
"11111"
redis 127.0.0.1:6379[3]> flushdb
OK
redis 127.0.0.1:6379[3]> dbsize
(integer) 0

二.string
set key value: 設置key對應的值爲string類型的value,返回1表示成功,0失敗
setnx key value: 同上,如果key已經存在,返回0 。nx 是not exist的意思
setex key time value: 設置key對應的值爲string類型的value,同時指定過期時間,如果key存在將覆蓋value值
get key: 獲取key對應的string值,如果key不存在返回nil
getset key value: 原子的設置key的值,並返回key的舊值。如果key不存在返回nil
mget key1 key2 ... keyN: 一次獲取多個key的值,如果對應key不存在,則對應返回nil
mset key1 value1 ... keyN valueN: 一次設置多個key的值,成功返回1表示所有的值都設置了,失敗返回0表示沒有任何值被設置
msetnx key1 value1 ... keyN valueN: 同上,但是不會覆蓋已經存在的key
incr key: 對key的值做加加操作,並返回新的值。注意incr一個不是int的value會返回錯誤,incr一個不存在的key,則設置key爲1
decr key: 同上,但是做的是減減操作,decr一個不存在key,則設置key爲-1
incrby key integer: 同incr,加指定值 ,key不存在時候會設置key,並認爲原來的value是 0
decrby key integer: 同decr,減指定值。decrby完全是爲了可讀性,我們完全可以通過incrby一個負值來實現同樣效果,反之一樣
append key value:  給指定key的字符串值追加value,返回新字符串值的長度
substr key start end: 返回截取過的key的字符串值,注意並不修改key的值

操作實例如下:
redis 127.0.0.1:6379> set key1 value1
OK
redis 127.0.0.1:6379> setnx key1 aaaa
(integer) 0
redis 127.0.0.1:6379> setex key1 1000000 aaaaa
OK
redis 127.0.0.1:6379> get key1
"aaaaa"
redis 127.0.0.1:6379> ttl key1
(integer) 999963
redis 127.0.0.1:6379> getset key1 bbbbb
"aaaaa"
redis 127.0.0.1:6379> dbsize
(integer) 1
redis 127.0.0.1:6379> get key1
"bbbbb"
redis 127.0.0.1:6379> ttl key1
(integer) -1
redis 127.0.0.1:6379> set key2 value2
OK
redis 127.0.0.1:6379> mget key1 key2 key3
1) "bbbbb"
2) "value2"
3) (nil)
redis 127.0.0.1:6379> mset key4 value4 key5 value5
OK
redis 127.0.0.1:6379> mget key1 key2 key3 key4 key5
1) "bbbbb"
2) "value2"
3) (nil)
4) "value4"
5) "value5"
redis 127.0.0.1:6379> incr key5
(error) ERR value is not an integer or out of range
redis 127.0.0.1:6379> mset key6 1000 key7 2000
OK
redis 127.0.0.1:6379> mget key6 key7
1) "1000"
2) "2000"
redis 127.0.0.1:6379> incr key6
(integer) 1001
redis 127.0.0.1:6379> incrby key7 222
(integer) 2222
redis 127.0.0.1:6379> mget key6 key7
1) "1001"
2) "2222"
redis 127.0.0.1:6379> decr key7
(integer) 2221
redis 127.0.0.1:6379> decrby key6 1000
(integer) 1
redis 127.0.0.1:6379> mget key6 key7
1) "1"
2) "2221"
redis 127.0.0.1:6379> get key1
"bbbbb"
redis 127.0.0.1:6379> append key1 ccccccc
(integer) 12
redis 127.0.0.1:6379> get key1
"bbbbbccccccc"
redis 127.0.0.1:6379> substr key1 4 7
"bccc"
redis 127.0.0.1:6379> get key1
"bbbbbccccccc"

三.list
lpush key string: 在key對應list的頭部添加字符串元素,返回1表示成功,0表示key存在且不是list類型
rpush key string: 同上,在尾部添加
llen key: 返回key對應list的長度,key不存在返回0,如果key對應類型不是list返回錯誤
lrange key start end: 返回指定區間內的元素,下標從0開始,負值表示從後面計算,-1表示倒數第一個元素 ,key不存在返回空列表
ltrim key start end:  刪除指定key 的值範圍以外的數據,成功返回1,key不存在返回錯誤
lset key index value: 設置list中指定下標的元素值(下標從0開始),成功返回1,key或者下標不存在返回錯誤
lrem key count value: 從key對應list中刪除count個和value相同的元素。count爲0時候刪除全部
lpop key: 從list的頭部刪除元素,並返回刪除元素。如果key對應list不存在或者是空返回nil,如果key對應值不是list返回錯誤
rpop: 同上,但是從尾部刪除
blpop key1...keyN timeout: lpop命令的block版本。從左到右掃描返回對第一個非空list進行lpop操作並返回,比如blpop list1 list2 list3 0 ,如果list不存在list2,list3都是非空則對list2做lpop並返回從list2中刪除的元素。如果所有的list都是空或不存在,則會阻塞timeout秒,timeout爲0表示一直阻塞。當阻塞時,如果有client對key1...keyN中的任意key進行push操作,則第一在這個key上被阻塞的client會立即返回。如果超時發生,則返回nil。
brpop: rpop的block版本。同blpop,一個是從頭部刪除一個是從尾部刪除
rpoplpush srckey destkey: 從srckey對應list的尾部移除元素並添加到destkey對應list的頭部,最後返回被移除的元素值,整個操作是原子的.如果srckey是空或者不存在返回nil

操作實例如下:
redis 127.0.0.1:6379> lpush k_list_1 aaaaaa
(integer) 1
redis 127.0.0.1:6379> lpush k_list_1 bbbbbb
(integer) 2
redis 127.0.0.1:6379> lpush k_list_1 c
(integer) 3
redis 127.0.0.1:6379>
redis 127.0.0.1:6379>
redis 127.0.0.1:6379> llen k_list_1
(integer) 3
redis 127.0.0.1:6379> lrange k_list_1 0 2
1) "c"
2) "bbbbbb"
3) "aaaaaa"
redis 127.0.0.1:6379> rpush k_list_1 dddddd
(integer) 4
redis 127.0.0.1:6379> rpush k_list_1 eeeeee
(integer) 5
redis 127.0.0.1:6379> rpush k_list_1 f
(integer) 6
redis 127.0.0.1:6379> llen k_list_1
(integer) 6
redis 127.0.0.1:6379> lrange k_list_1 0 5
1) "c"
2) "bbbbbb"
3) "aaaaaa"
4) "dddddd"
5) "eeeeee"
6) "f"
redis 127.0.0.1:6379> lrange k_list_1 2 -1
1) "aaaaaa"
2) "dddddd"
3) "eeeeee"
4) "f"
redis 127.0.0.1:6379> lrange k_list_1 0 5
1) "c"
2) "bbbbbb"
3) "aaaaaa"
4) "dddddd"
5) "eeeeee"
6) "f"
redis 127.0.0.1:6379> ltrim k_list_1 1 2
OK
redis 127.0.0.1:6379> lrange k_list_1 0 1
1) "bbbbbb"
2) "aaaaaa"
redis 127.0.0.1:6379> lpush k_list_2 a
(integer) 1
redis 127.0.0.1:6379> lpush k_list_2 b
(integer) 2
redis 127.0.0.1:6379> lpush k_list_2 c
(integer) 3
redis 127.0.0.1:6379> lpush k_list_2 d
(integer) 4
redis 127.0.0.1:6379> lpush k_list_2 e
(integer) 5
redis 127.0.0.1:6379> lpush k_list_2 f
(integer) 6
redis 127.0.0.1:6379> lrange k_list_2 0 5
1) "f"
2) "e"
3) "d"
4) "c"
5) "b"
6) "a"
redis 127.0.0.1:6379> lset k_list_2 1 "99999999999999999999"
OK
redis 127.0.0.1:6379> lrange k_list_2 0 5
1) "f"
2) "99999999999999999999"
3) "d"
4) "c"
5) "b"
6) "a"

redis 127.0.0.1:6379> lrange k_list_2 0 5
1) "99999999999999999999"
2) "d"
3) "99999999999999999999"
4) "c"
5) "99999999999999999999"
6) "a"
redis 127.0.0.1:6379> LREM k_list_2 2 "99999999999999999999"
(integer) 2
redis 127.0.0.1:6379> lrange k_list_2 0 3
1) "d"
2) "c"
3) "99999999999999999999"
4) "a"

redis 127.0.0.1:6379> lpop k_list_2
"d"
redis 127.0.0.1:6379> lrange k_list_2 0 2
1) "c"
2) "99999999999999999999"
3) "a"
redis 127.0.0.1:6379> rpop k_list_2
"a"
redis 127.0.0.1:6379> lrange k_list_2 0 2
1) "c"
2) "99999999999999999999"

redis 127.0.0.1:6379> lpush k_list_3 aaaaaaaaaaaa
(integer) 1
redis 127.0.0.1:6379> lpush k_list_3 bbbbbbbbbbbb
(integer) 2
redis 127.0.0.1:6379> lpush k_list_3 cccccccccccc
(integer) 3
redis 127.0.0.1:6379> lpush k_list_3 dddddddddddd
(integer) 4
redis 127.0.0.1:6379> lpush k_list_4 111111111111
(integer) 1
redis 127.0.0.1:6379> lpush k_list_4 222222222222
(integer) 2
redis 127.0.0.1:6379> lpush k_list_4 333333333333
(integer) 3
redis 127.0.0.1:6379> lpush k_list_4 444444444444
redis 127.0.0.1:6379> LRANGE k_list_3 0 3
1) "dddddddddddd"
2) "cccccccccccc"
3) "bbbbbbbbbbbb"
4) "aaaaaaaaaaaa"
redis 127.0.0.1:6379> LRANGE k_list_4 0 3
1) "444444444444"
2) "333333333333"
3) "222222222222"
4) "111111111111"
redis 127.0.0.1:6379> rpoplpush k_list_3 k_list_4
"aaaaaaaaaaaa"
redis 127.0.0.1:6379> LRANGE k_list_3 0 3
1) "dddddddddddd"
2) "cccccccccccc"
3) "bbbbbbbbbbbb"
redis 127.0.0.1:6379> LRANGE k_list_4 0 4
1) "aaaaaaaaaaaa"
2) "444444444444"
3) "333333333333"
4) "222222222222"
5) "111111111111"

四.set
sadd key member: 向名稱爲key的set中添加元素member
srem key member: 刪除名稱爲key的set中的元素member
spop key: 隨機返回並刪除名稱爲key的set中一個元素
srandmember key: 隨機返回名稱爲key的set的一個元素,但是不刪除元素
smove srckey dstkey member: 從srckey對應set中移除member並添加到dstkey對應set中,整個操作是原子的。成功返回1,如果member在srckey中不存在返回0,如果key不是set類型返回錯誤
scard key: 返回名稱爲key的set的元素個數,如果set是空或者key不存在返回0
sismember key member: 測試member是否是名稱爲key的set的元素
sinter key1 key2...keyN: 返回所有給定key的交集
sinterstore dstkey key1...keyN: 同sinter,求交集並將交集保存到dstkey的集合
sunion key1 key2...keyN: 返回所有給定key的並集
sunionstore dstkey key1...keyN: 同sunion,求並集並將並集保存到dstkey的集合
sdiff key1 key2...keyN: 返回所有給定key的差集
sdiffstore dstkey key1...keyN: 同sdiff,求差集並將差集保存到dstkey的集合
smembers key: 返回key對應set的所有元素,結果是無序的

操作實例:
redis 127.0.0.1:6379> sadd k_s_1 aaa
(integer) 1
redis 127.0.0.1:6379> sadd k_s_1 bbb
(integer) 1
redis 127.0.0.1:6379> sadd k_s_1 ccc
(integer) 1
redis 127.0.0.1:6379> sadd k_s_1 ddd
(integer) 1
redis 127.0.0.1:6379> sadd k_s_2 111
(integer) 1
redis 127.0.0.1:6379> sadd k_s_2 222
(integer) 1
redis 127.0.0.1:6379> sadd k_s_2 333
(integer) 1
redis 127.0.0.1:6379> sadd k_s_2 444
(integer) 1
redis 127.0.0.1:6379> smembers k_s_1
1) "aaa"
2) "ddd"
3) "ccc"
4) "bbb"
redis 127.0.0.1:6379> srandmember k_s_1
"ccc"
redis 127.0.0.1:6379> spop k_s_1
"bbb"
redis 127.0.0.1:6379> smembers k_s_1
1) "aaa"
2) "ddd"
3) "ccc"
redis 127.0.0.1:6379> smove k_s_1 k_s_2 "aaa"
(integer) 1
redis 127.0.0.1:6379> smembers k_s_1
1) "ddd"
2) "ccc"
redis 127.0.0.1:6379> smembers k_s_2
1) "111"
2) "444"
3) "333"
4) "222"
5) "aaa
redis 127.0.0.1:6379> scard k_s_2
(integer) 5
redis 127.0.0.1:6379> sismember k_s_1 "aaa"
(integer) 0
redis 127.0.0.1:6379> smembers k_s_1
1) "aaa"
2) "ddd"
3) "ccc"
redis 127.0.0.1:6379> smembers k_s_2
1) "333"
2) "222"
3) "111"
4) "aaa"
5) "444"
redis 127.0.0.1:6379> sinter k_s_1 k_s_2
1) "aaa"
redis 127.0.0.1:6379> sinterstore k_ss k_s_1 k_s_2
(integer) 1
redis 127.0.0.1:6379> smembers k_ss
1) "aaa"
redis 127.0.0.1:6379> sunion k_s_1 k_s_2
1) "aaa"
2) "111"
3) "ddd"
4) "444"
5) "222"
6) "333"
7) "ccc"
redis 127.0.0.1:6379> sunionstore k_sun k_s_1 k_s_2
(integer) 7
redis 127.0.0.1:6379> smembers k_sun
1) "aaa"
2) "111"
3) "ddd"
4) "444"
5) "222"
6) "333"
7) "ccc"
redis 127.0.0.1:6379> sdiff k_s_1 k_s_2
1) "ddd"
2) "ccc"
redis 127.0.0.1:6379> sdiff k_s_2 k_s_1
1) "111"
2) "444"
3) "222"
4) "333"

五.zset(sorted set)
zadd key score member: 向名稱爲key的zset中添加元素member,score用於排序。如果該元素已經存在,則根據score更新該元素的順序
zrem key member: 刪除名稱爲key的zset中的元素member
zincrby key incr member: 如果在名稱爲key的zset中已經存在元素member,則該元素的score增加increment;否則向集合中添加該元素,其score的值爲increment
zrank key member: 返回名稱爲key的zset(元素已按score從小到大排序)中member元素的排名即下標(即index,從0開始),若沒有member元素,返回“nil”
zrevrank key member: 返回名稱爲key的zset(元素已按score從大到小排序)中member元素的rank(即index,從0開始),若沒有member元素,返回“nil”
zrange key start end: 返回名稱爲key的zset(元素已按score從小到大排序)中的index從start到end的所有元素
zrevrange key start end: 返回名稱爲key的zset(元素已按score從大到小排序)中的index從start到end的所有元素
zrangebyscore key min max: 返回集合中score在給定區間的元素
zcount key min max: 返回集合中score在給定區間的數量
zcard key: 返回集合中元素個數
zscore key element:  返回給定元素對應的score
zremrangebyrank key min max: 刪除集合中排名在給定區間的元素
zremrangebyscore key min max: 刪除集合中score在給定區間的元素

操作實例:
redis 127.0.0.1:6379> zadd k_zs_1 1 aaaa
(integer) 1
redis 127.0.0.1:6379> zadd k_zs_1 1 bbbb
(integer) 1
redis 127.0.0.1:6379> zadd k_zs_1 1 ccccc
(integer) 1
redis 127.0.0.1:6379> zadd k_zs_1 1 aabb
(integer) 1
redis 127.0.0.1:6379> zrange k_zs_1 0 3
1) "aaaa"
2) "aabb"
3) "bbbb"
4) "ccccc"
redis 127.0.0.1:6379> zrem k_zs_1 "ccccc"
(integer) 1
redis 127.0.0.1:6379> zrange k_zs_1 0 3
1) "aaaa"
2) "aabb"
3) "bbbb"
redis 127.0.0.1:6379> zadd k_zs_1 3 aaaa
(integer) 0
redis 127.0.0.1:6379> zrange k_zs_1 0 3
1) "aabb"
2) "bbbb"
3) "aaaa"
redis 127.0.0.1:6379> zincrby k_zs_1 5 aabb
"6"
redis 127.0.0.1:6379> zincrby k_zs_1 5 aabbcc
"5"
redis 127.0.0.1:6379> zrange k_zs_1 0 3
1) "bbbb"
2) "aaaa"
3) "aabbcc"
4) "aabb"
redis 127.0.0.1:6379> zrank k_zs_1 "aaaa"
(integer) 1
redis 127.0.0.1:6379> zscore k_zs_1 "bbbb"
"1"
redis 127.0.0.1:6379> zscore k_zs_1 "aaaa"
"3"
redis 127.0.0.1:6379> zscore k_zs_1 "aabbcc"
"5"
redis 127.0.0.1:6379> zscore k_zs_1 "aabb"
"6"
redis 127.0.0.1:6379> zscore k_zs_1 "aabbccdd"
"9"
redis 127.0.0.1:6379> zrangebyscore k_zs_1 4 9
1) "aabbcc"
2) "aabb"
3) "aabbccdd"
redis 127.0.0.1:6379> zcount  k_zs_1 4 9
(integer) 3
redis 127.0.0.1:6379> zcard k_zs_1
(integer) 5
redis 127.0.0.1:6379> zrange k_zs_1 0 6
1) "bbbb"
2) "aaaa"
3) "aabbcc"
4) "aabb"
5) "aabbccdd"
redis 127.0.0.1:6379> zremrangebyrank k_zs_1 0 1
(integer) 2
redis 127.0.0.1:6379> zrange k_zs_1 0 6
1) "aabbcc"
2) "aabb"
3) "aabbccdd"
redis 127.0.0.1:6379> zrange k_zs_1 0 6
1) "aabbcc"
2) "aabb"
3) "aabbccdd"
redis 127.0.0.1:6379> zscore k_zs_1 "aabbcc"
"5"
redis 127.0.0.1:6379> zscore k_zs_1 "aabb"
"6"
redis 127.0.0.1:6379> zscore k_zs_1 "aabbccdd"
"9"
redis 127.0.0.1:6379> zremrangebyscore k_zs_1 6 9
(integer) 2
redis 127.0.0.1:6379> zrange k_zs_1 0 6
1) "aabbcc"

六.hash
hset key field value: 向名稱爲key的hash中添加元素field<—>value
hget key field: 返回名稱爲key的hash中field對應的value
hmget key filed1....fieldN: 返回名稱爲key的hash中field i對應的value 
hmset key filed1 value1 ... filedN valueN: 向名稱爲key的hash中添加元素field i<—>value i
hincrby key field integer: 將名稱爲key的hash中field的value加上給定值
hexists key field: 測試名稱爲key的hash中是否存在鍵爲field的域
hdel key field: 刪除名稱爲key的hash中鍵爲field的域
hlen key: 返回名稱爲key的hash中元素個數
hkeys key: 返回名稱爲key的hash中所有field
hvals key: 返回名稱爲key的hash中所有field對應的value
hgetall key: 返回名稱爲key的hash中所有的鍵(field)及其對應的value

操作實例如下:
redis 127.0.0.1:6379> hmset k_h_1 f1 aaaa f2 bbbb f3 cccc f4 dddd f5 cccc f6 1000
OK
redis 127.0.0.1:6379> hmget k_h_1 f1 f2 f3 f4 f5 f6
1) "aaaa"
2) "bbbb"
3) "cccc"
4) "dddd"
5) "cccc"
6) "1000"
redis 127.0.0.1:6379> hincrby k_h_1 f6 99
(integer) 1099
redis 127.0.0.1:6379> hget k_h_1 f6
"1099"
redis 127.0.0.1:6379> hexists k_h_1 f6
(integer) 1
redis 127.0.0.1:6379> hdel k_h_1 f6
(integer) 1
redis 127.0.0.1:6379> hexists k_h_1 f6
(integer) 0
redis 127.0.0.1:6379> hlen k_h_1
(integer) 5
redis 127.0.0.1:6379> hkeys k_h_1
1) "f1"
2) "f2"
3) "f3"
4) "f4"
5) "f5"
redis 127.0.0.1:6379> hvals k_h_1
1) "aaaa"
2) "bbbb"
3) "cccc"
4) "dddd"
5) "cccc"
redis 127.0.0.1:6379> hgetall k_h_1
 1) "f1"
 2) "aaaa"
 3) "f2"
 4) "bbbb"
 5) "f3"
 6) "cccc"
 7) "f4"
 8) "dddd"
 9) "f5"
10) "cccc"

 redis數據類型操作 原文地址:http://www.ttlsa.com/archives/189
redis的安裝配置參見: http://www.ttlsa.com/archives/184

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