redis数据类型操作

  • A+
所属分类:Redis

redis数据类型操作

redis的安装配置参见: http://www.bhlaab.com/html/1226.html

一.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"

微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~

发表评论