Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)

一、string类型及基本操作(字符)

string 是 redis 最基本的类型,最大上限是1G 字节。你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。

string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。

redis数据类型及基本操作_第1张图片

set

设置key 对应的值为string 类型的value。

127.0.0.1:6379> set name wh_k
OK

setnx

设置key 对应的值为string 类型的value。如果key 已经存在,返回0,nx 是not exist 的意思。

127.0.0.1:6379> setnx name wh_kgg
(integer) 0

setex

设置key 对应的值为string 类型的value,并指定此键值对应的有效期。例如我们添加一个whk= good 的键值对,并指定它的有效期是10 秒

127.0.0.1:6379> setex whk 10 good
OK
127.0.0.1:6379> get whk
"good"
127.0.0.1:6379> get whk
(nil)

setrange

设置指定key 的value 值的子字符串。例如我们希望替换name某部分字符:

127.0.0.1:6379> set name [email protected]
OK
127.0.0.1:6379> get name
"[email protected]"
127.0.0.1:6379> setrange name 4 126.com
(integer) 11
127.0.0.1:6379> get name
"[email protected]"
其中4是指从下标为4(包含4)的字符开始替换,下标从0开始。

mset

一次设置多个key 的值,成功返回ok 表示所有的值都设置了,失败返回0 表示没有任何值被设置。

127.0.0.1:6379> mset num1 12 num2 34 num3 56
OK

msetnx

一次设置多个key 的值,成功返回ok 表示所有的值都设置了,失败返回0 表示没有任何值被设置,但是不会覆盖已经存在的key。

127.0.0.1:6379> msetnx num3 55 num4 78
(integer) 0
127.0.0.1:6379> get num4
(nil)
127.0.0.1:6379> get num3
"56"

get

获取key 对应的string 值,如果key 不存在返回nil

127.0.0.1:6379> get name
"[email protected]"
127.0.0.1:6379> get name1
(nil)

getset

设置key 的值,并返回key 的旧值。

127.0.0.1:6379> get name
"[email protected]"
127.0.0.1:6379> getset name [email protected]
"[email protected]"
127.0.0.1:6379> get name
"[email protected]"

getrange

获取指定key 的value 值的子字符串,左下标从0开始,右下标从-1开始,当下标超出字符串长度时,将默认为是同方向的最大下标。

127.0.0.1:6379> get name
"[email protected]"
127.0.0.1:6379> getrange name 0 4
"whk@q"
127.0.0.1:6379> getrange name -1 -5
""
127.0.0.1:6379> getrange name  -5 -1
"q.com"

mget

一次获取多个key 的值,如果对应key 不存在,则对应返回nil。

127.0.0.1:6379> mget num1 num2 num3 num4 num5
1) "12"
2) "34"
3) "56"
4) (nil)
5) (nil)

incr

将 key 中储存的数字值增一。

127.0.0.1:6379> get age
"10"
127.0.0.1:6379> incr age
(integer) 11
127.0.0.1:6379> get age
"11"

ncrby

加指定值 ,key 不存在时候会设置key,并认为原来的value 是 0

127.0.0.1:6379> get age
"11"
127.0.0.1:6379> incrby age 5
(integer) 16
127.0.0.1:6379> get age
"16"
127.0.0.1:6379> incrby age1 5
(integer) 5
127.0.0.1:6379> get age1
"5"

decr

对key 的值做的是减一操作,decr 一个不存在key,则设置key 为-1

127.0.0.1:6379> get age1
"5"
127.0.0.1:6379> decr age1
(integer) 4
127.0.0.1:6379> get age1
"4"

decrby

同decr,减指定值,可为负值。

127.0.0.1:6379> get age1
"4"
127.0.0.1:6379> decrby age1 4
(integer) 0
127.0.0.1:6379> get age1
"0"
127.0.0.1:6379> decrby age1 4
(integer) -4
127.0.0.1:6379> get age1
"-4"

append

给指定key 的字符串值追加value,返回新字符串值的长度。     

127.0.0.1:6379> get name
"[email protected]"
127.0.0.1:6379> append name .china
(integer) 16
127.0.0.1:6379> get name
"[email protected]"

strlen

取指定key 的value 值的长度。

127.0.0.1:6379> get name
"[email protected]"
127.0.0.1:6379> strlen name
(integer) 16
127.0.0.1:6379> strlen age1
(integer) 2
127.0.0.1:6379> get age
"16"

二、hashes 类型及基本操作

Redis hash 是一个键值(key=>value)对集合。是一个 string 类型的 field 和 value 的映射表,特别适合用于存储对象。

相较于将对象的每个字段存成单个string 类型。将一个对象存储在hash 类型中会占用更少的内存,省内存的原因是新建一个hash 对象时开始是zipmap(又称为small hash)来存储的。当field 或者value的大小超出一定限制后,Redis 会在内部自动将zipmap 替换成正常的hash 实现. 这个限制可以在配置文件中设定:
hash-max-zipmap-entries 64 #配置字段最多64 个
hash-max-zipmap-value 512 #配置value 最大为512 字节

redis数据类型及基本操作_第2张图片

hset

设置hash field 为指定值,如果key 不存在,则先进行创建

127.0.0.1:6379> hset mytest field1 Hello
(integer) 1
    127.0.0.1:6379> hget mytest field1
"Hello"

hsetnx

 设置hash field 为指定值,如果key 不存在,则先创建。如果field 已经存在,返回0。

hmset

同时设置hash 的多个field。

hget

获取指定的hash field。

hmget

获取全部指定的hash filed。

127.0.0.1:6379> hmget mytest field1 field2 field3
1) "Hello"
2) "world"
3) "!"

hincrby

指定的hash filed 加上给定值(无hincr操作)。

127.0.0.1:6379> hset mytest field4 10
(integer) 1
127.0.0.1:6379> hget mytest field4
"10"
127.0.0.1:6379> hincr mytest field4
(error) ERR unknown command 'hincr'
127.0.0.1:6379> hincrby mytest field4 8
(integer) 18

hexists

测试指定field 是否存在,存在返回1,不存在返回0。

hlen

返回指定hash 的field 数量。

127.0.0.1:6379> hlen mytest
(integer) 5

hdel

删除指定hash 的field 。

127.0.0.1:6379> hlen mytest
(integer) 2
127.0.0.1:6379> hdel mytest field3
(integer) 1
127.0.0.1:6379> hlen mytest
(integer) 1

hkeys

返回hash 的所有field。

127.0.0.1:6379> hkeys mytest
1) "txt1"
127.0.0.1:6379> hset mytest field2 2
(integer) 1
127.0.0.1:6379> hkeys mytest
1) "txt1"
2) "field2"

hvals

返回hash 的所有value值。

127.0.0.1:6379> hvals mytest
1) "Hello"
2) "2"

hgetall

获取某个hash 中全部的filed 及value。

127.0.0.1:6379> hgetall mytest
1) "txt1"
2) "Hello"
3) "field2"
4) "2"

三、lists 类型及操作(列表)

list 是一个链表结构,简单的字符串列表,按照插入顺序排序,链表的最大长度是(2的32 次方)。主要功能是push、pop、获取一个范围的所有值等等,操作中key 可以理解为链表的名字。

redis数据类型及基本操作_第3张图片

lpush

在key 对应list 的头部添加字符串元素(left)

127.0.0.1:6379> lrange testlist 0 0
1) "word"
127.0.0.1:6379> lpush testlist "hello"
(integer) 2
127.0.0.1:6379> lrange testlist 0 1
1) "hello"
2) "word"

rpush

在key 对应list 的尾部添加字符串元素(right)

127.0.0.1:6379> lrange testlist 0 1
1) "hello"
2) "word"
127.0.0.1:6379> rpush testlist "!"
(integer) 3
127.0.0.1:6379> lrange testlist 0 2
1) "hello"
2) "word"
3) "!"

linsert

在key 对应list 的特定位置之前或之后添加字符串元素

127.0.0.1:6379> linsert testlist before "word" "beautiful"
(integer) 4
127.0.0.1:6379> lrange testlist 0 3
1) "hello"
2) "beautiful"
3) "word"
4) "!"

lset

设置list 中指定下标的元素值(下标从0 开始)

127.0.0.1:6379> lrange testlist 0 3
1) "hello"
2) "beautiful"
3) "word"
4) "!"
127.0.0.1:6379> lset testlist 0 "Say"
OK
127.0.0.1:6379> lrange testlist 0 4
1) "Say"
2) "beautiful"
3) "word"
4) "!"

lrem

从key 对应list 中删除count 个和value 相同的元素。count>0 时,按从头到尾的顺序删除;count<0 时,按从尾到头的顺序删除;count<0 时,按从尾到头的顺序删除。

127.0.0.1:6379> lrange testlist 0 6
1) "2010"
2) "Say"
3) "beautiful"
4) "word"
5) "2010"
6) "2010"
127.0.0.1:6379> lrem testlist 2 "2010"
(integer) 2
127.0.0.1:6379> lrange testlist 0 6
1) "Say"
2) "beautiful"
3) "word"
4) "2010"

ltrim

保留指定key 的值范围内的数据

127.0.0.1:6379> lrange testlist 0 3
1) "Say"
2) "beautiful"
3) "word"
4) "2010"
127.0.0.1:6379> ltrim testlist 0 2
OK
127.0.0.1:6379> lrange testlist 0 3
1) "Say"
2) "beautiful"
3) "word"

lpop

从list 的头部删除元素,并返回删除元素

127.0.0.1:6379> lrange testlist 0 3
1) "Say"
2) "beautiful"
3) "word"
127.0.0.1:6379> lpop testlist 
"Say"
127.0.0.1:6379> lrange testlist 0 3
1) "beautiful"
2) "word"

rpop

从list 的尾部删除元素,并返回删除元素

127.0.0.1:6379> lrange testlist 0 3
1) "beautiful"
2) "word"
127.0.0.1:6379> rpop testlist
"word"
127.0.0.1:6379> lrange testlist 0 3
1) "beautiful"

rpoplpush

从第一个list 的尾部移除元素并添加到第二个list 的头部,最后返回被移除的元素值,整个操作是原子的.如果第一个list 是空或者不存在返回nil

127.0.0.1:6379> lrange testlist 0 3
1) "beautiful"
127.0.0.1:6379> lrange testlist2 0 1
(empty list or set)
127.0.0.1:6379> rpoplpush testlist testlist2
"beautiful"
127.0.0.1:6379> lrange testlist 0 1
(empty list or set)
127.0.0.1:6379> lrange testlist2 0 1
1) "beautiful"

lindex

返回名称为key 的list 中index 位置的元素

127.0.0.1:6379> lrange testlist2 0 1
1) "beautiful"
127.0.0.1:6379> index testlist2 1
(error) ERR unknown command 'index'
127.0.0.1:6379> lindex testlist2 1
(nil)
127.0.0.1:6379> lindex testlist2 0
"beautiful"

llen

返回key 对应list 的长度

127.0.0.1:6379> lrange testlist2 0 1
1) "beautiful"
127.0.0.1:6379> llen testlist2
(integer) 1

四、sets 类型及操作(集合)

set 是集合,和我们数学中的集合概念相似,对集合的操作有添加删除元素,有对多个集合求交并差等操作,操作中key 理解为集合的名字。集合成员是唯一的,这就意味着集合中不能出现重复的数据。set 元素最大可以包含(2 的32 次方)个元素。

redis数据类型及基本操作_第4张图片

sadd

向set 中添加元素

127.0.0.1:6379> sadd testset 'Hello'
(integer) 1
127.0.0.1:6379> sadd testset 'everybody'
(integer) 1
127.0.0.1:6379> smembers testset
1) "Hello"
2) "everybody"

srem

删除set 中的元素member

127.0.0.1:6379> smembers testset
1) "Hello"
2) "everybody"
127.0.0.1:6379> srem testset 'Hello'
(integer) 1
127.0.0.1:6379> smembers testset
1) "everybody"

spop

随机删除set 中一个元素

127.0.0.1:6379> smembers testset
1) "is"
2) "OK"
3) "everybody"
127.0.0.1:6379> spop testset
"is"
127.0.0.1:6379> smembers testset
1) "OK"
2) "everybody"

sdiff

返回与第一个key 的差集

127.0.0.1:6379> smembers testset
1) "OK"
2) "everybody"
127.0.0.1:6379> sadd testset1 'OK'
(integer) 1
127.0.0.1:6379> sadd testset1 '!!'
(integer) 1
127.0.0.1:6379> smembers testset1
1) "!!"
2) "OK"
127.0.0.1:6379> sdiff testset testset1
1) "everybody"
127.0.0.1:6379> sdiff testset1 testset
1) "!!"

sdiffstore

返回与第一个key 的差集,并将结果存为另一个key

127.0.0.1:6379> sdiff testset1 testset
1) "!!"
127.0.0.1:6379> sdiffstore testset2 testset1 testset
(integer) 1
127.0.0.1:6379> smembers testset2
1) "!!"

sinter

返回所有给定key 的交集

127.0.0.1:6379> smembers testset
1) "OK"
2) "everybody"
127.0.0.1:6379> smembers testset1
1) "!!"
2) "OK"
127.0.0.1:6379> sinter testset testset1 
1) "OK"
127.0.0.1:6379> sdiff testset testset1
1) "everybody"

sinterstore

返回所有交集,并将结果存为另一个key

127.0.0.1:6379> sinter testset testset1 
1) "OK"
127.0.0.1:6379> sdiff testset testset1
1) "everybody"
127.0.0.1:6379> sinterstore testset3 testset testset1
(integer) 1
127.0.0.1:6379> smembers testset3
1) "OK"

sunion

返回所有的并集

127.0.0.1:6379> smembers testset3
1) "OK"
127.0.0.1:6379> smembers testset2
1) "!!"
127.0.0.1:6379> sunion testset3 testset2
1) "!!"
2) "OK"

sunionstore

返回所有并集,并将结果存为另一个key

127.0.0.1:6379> sunion testset3 testset2
1) "!!"
2) "OK"
127.0.0.1:6379> sunionstore testset4 testset3 testset2
(integer) 2
127.0.0.1:6379> smembers testset4
1) "!!"
2) "OK"

smove

从第一个对应的set 中移除member 并添加到第二个对应set 中

127.0.0.1:6379> smembers testset1
1) "!!"
2) "OK"
127.0.0.1:6379> smembers testset2
1) "!!"
127.0.0.1:6379> smove testset1 testset2 "!!"
(integer) 1
127.0.0.1:6379> smembers testset1
1) "OK"
127.0.0.1:6379> smembers testset2
1) "!!"

scard

返回set 的元素个数

127.0.0.1:6379> smembers testset2
1) "!!"
127.0.0.1:6379> scard testset2
(integer) 1

sismember

测试member 是否是set 的元素

127.0.0.1:6379> smembers testset1
1) "OK"
127.0.0.1:6379> sismember testset1 OK
(integer) 1
127.0.0.1:6379> sismember testset1 ok
(integer) 0
127.0.0.1:6379> sismember testset1 "OK"
(integer) 1
127.0.0.1:6379> sismember testset1 'OK'
(integer) 1

srandmember

随机返回set 的一个元素,但是不删除元素

127.0.0.1:6379> smembers testset1
1) "OK"
2) "!"
3) "Everybody"
127.0.0.1:6379> srandmember testset1
"!"
127.0.0.1:6379> smembers testset1
1) "OK"
2) "!"
3) "Everybody"

五、sorted sets 类型及操作(有序集合)

有序集合是集合的升级版,不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。

redis数据类型及基本操作_第5张图片

zadd

向zset 中添加元素member,score 用于排序。如果该元素已经存在,则根据score 更新该元素的顺序。

127.0.0.1:6379> zadd testzset  1 'one'
(integer) 1
127.0.0.1:6379> zadd testzset 2 'two'
(integer) 1
127.0.0.1:6379> zadd testzset 3 'two'
(integer) 0
127.0.0.1:6379> zrange testzset 0 2
1) "one"
2) "two"
127.0.0.1:6379> zrange testzset 0 2 withscores
1) "one"
2) "1"
3) "two"
4) "3"

zrem

删除zset 中的元素member

127.0.0.1:6379> zrange testzset 0 2 withscores
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
127.0.0.1:6379> zrem testzset one
(integer) 1
127.0.0.1:6379> zrange testzset 0 2 withscores
1) "two"
2) "2"
3) "three"
4) "3"

zincrby

如果zset 中已经存在元素member,则增加该元素的score,new_score=old_score+zincrby_score;否则向集合中添加该元素。

127.0.0.1:6379> zrange testzset 0 2 withscores
1) "two"
2) "2"
3) "three"
4) "3"
127.0.0.1:6379> zincrby testzset 5 "two"
"7"
127.0.0.1:6379> zrange testzset 0 5 withscores
1) "three"
2) "3"
3) "two"
4) "7"
127.0.0.1:6379> zincrby testzset 5 "four"
"5"
127.0.0.1:6379> zrange testzset 0 5 withscores
1) "three"
2) "3"
3) "four"
4) "5"
5) "two"
6) "7"

zrank

返回某个元素的排名(按score 从小到大排),即下标

127.0.0.1:6379> zrange testzset 0 5 withscores
1) "three"
2) "3"
3) "four"
4) "5"
5) "two"
6) "7"
127.0.0.1:6379> zrank testzset "four"
(integer) 1
127.0.0.1:6379> zrank testzset "two"
(integer) 2
127.0.0.1:6379> zrank testzset "three"
(integer) 0

zrevrank

返回zset中元素的排名(按score 从大到小排序),即下标

127.0.0.1:6379> zrange testzset 0 5 withscores
1) "three"
2) "3"
3) "four"
4) "5"
5) "two"
6) "7"
127.0.0.1:6379> zrevrank testzset "four"
(integer) 1
127.0.0.1:6379> zrevrank testzset "two"
(integer) 0
127.0.0.1:6379> zrevrank testzset "three"
(integer) 2

zrevrange

返回(按score 从大到小排序) 从start 到end 的所有元素

127.0.0.1:6379> zrevrange testzset 0 1 withscores
1) "two"
2) "7"
3) "four"
4) "5"

zrangebyscore

返回集合中score 在给定区间的元素

127.0.0.1:6379> zrange testzset 0 2 withscores
1) "three"
2) "3"
3) "four"
4) "5"
5) "two"
6) "7"
127.0.0.1:6379> zrangebyscore testzset 0 5 withscores
1) "three"
2) "3"
3) "four"
4) "5"

zcount

返回集合中score 在给定区间的数量

127.0.0.1:6379> zcount testzset 3 5
(integer) 2

zcard

返回集合中元素个数

127.0.0.1:6379> zcard testzset
(integer) 3
127.0.0.1:6379> zrange testzset 0 5 withscores
1) "three"
2) "3"
3) "four"
4) "5"
5) "two"
6) "7"

zscore

返回给定元素对应的score

127.0.0.1:6379> zrange testzset 0 5 withscores
1) "three"
2) "3"
3) "four"
4) "5"
5) "two"
6) "7"
127.0.0.1:6379> zscore testzset "three"
"3"

zremrangebyrank

删除集合中排名在给定区间(下标)的元素

127.0.0.1:6379> zrange testzset 0 5 withscores
1) "three"
2) "3"
3) "four"
4) "5"
5) "two"
6) "7"
127.0.0.1:6379> zremrangebyrank testzset 2 2
(integer) 1
127.0.0.1:6379> zrange testzset 0 5 withscores
1) "three"
2) "3"
3) "four"
4) "5"

zremrangebyscore

删除集合中score 在给定区间的元素

127.0.0.1:6379> zrange testzset 0 5 withscores
1) "three"
2) "3"
3) "four"
4) "5"
127.0.0.1:6379> zremrangebyscore testzset 3 5
(integer) 2
127.0.0.1:6379> zrange testzset 0 5 withscores
(empty list or set)