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