Redis系列(2)--- Redis数据类型

Redis支持5中数据类型,分别是:字符串(String)、列表(List)、集合(Set)、有序集合(Sorted Set)和哈希(hash)。

字符串

redis中的字符串是二进制安全的,可以存储任何类型的数据,最大长度是512M。

设置key-value对:set key value
同时设置多个key-value对:mset key value [key value …]

获取key所对应的值:get key
获取多个key所对应的值:mget key [key…]
获取所有的key:keys *

查询key是否存在:exists key。返回值1表示key存在,0表示不存在。

删除key:del key [key …]。返回值表示删除key的个数。如果是0,表示没有删除任何key

返回key的类型:type key

修改key所对应的value:getset key value。如果key不存在,则设置key-value,否则将key所对应的value修改为指定的value,返回值为老的value。

重命名一个key:rename key

获取字符串的长度:strlen key

127.0.0.1:6379> set myname "felix"
OK
127.0.0.1:6379> get myname
"felix"
127.0.0.1:6379> keys *
1) "myname"
127.0.0.1:6379> EXISTS myname
(integer) 1
127.0.0.1:6379> 

删除key
127.0.0.1:6379> set test1 1
OK
127.0.0.1:6379> set test2 2
OK
127.0.0.1:6379> set test3 3
OK
127.0.0.1:6379> del test1 test2 test
(integer) 2
127.0.0.1:6379> 

返回key的类型:
127.0.0.1:6379> type myname
string
127.0.0.1:6379> 

修改或设置key对应的value:
127.0.0.1:6379> getset hello felix
(nil)
127.0.0.1:6379> get hello
"felix"
127.0.0.1:6379> getset hello "felix.zhang"
"felix"
127.0.0.1:6379> get hello
"felix.zhang"
127.0.0.1:6379> 

如果字符串是数字类型,还可以进行数值操作。
redis的所有操作都是原子操作,不管有多少个客户端连接,获取到的结果都是一致的。

数值操作相关的指令:返回值为增加或减少后的值。
incr:每次操作增加1。
incrby:增加指定的值。如果key不存在,从0开始增加。
decr:每次操作减少1.
decrby:每次操作减少指定的值。如果key不存在,从0开始减少。

INCR:
127.0.0.1:6379> set test 1
OK
127.0.0.1:6379> get test
"1"
127.0.0.1:6379> INCR test
(integer) 2
127.0.0.1:6379> INCR test
(integer) 3
127.0.0.1:6379> get test
"3"
127.0.0.1:6379> 

INCRBY:
127.0.0.1:6379> get test
"3"
127.0.0.1:6379> INCRBY test 2
(integer) 5
127.0.0.1:6379> INCRBY test 2
(integer) 7
127.0.0.1:6379> 


DECR:
127.0.0.1:6379> DECR test
(integer) 6
127.0.0.1:6379> DECR test
(integer) 5
127.0.0.1:6379> 

DECRBY:
127.0.0.1:6379> DECRBY test 5
(integer) 0
127.0.0.1:6379> DECRBY test 5
(integer) -5
127.0.0.1:6379> 

列表

列表的最大长度是2^32 - 1
不管列表的最大长度有多长,在列表中插入数据的速度都是一样的。

列表常用的操作:
lpush:在列表的左侧插入一个元素。返回值为列表的长度。
rpush:在列表的右侧插入一个元素。返回值为列表的长度。
lrange:返回指定范围内的元素。包含开始和结束索引。如果要查询所有的元素可以用lrange list 0 -1
llen:获取列表的长度。

lpop:删除列表左边的元素。返回值是删除的元素。
rpop:删除列表右边的元素。返回值是删除的元素。

lindex:根据索引获取值。lindex key index

linsert:往列表中插入值。linsert key before|after pivot value

lset:修改指定索引处的值。指定的索引必须存在,否则会报错。

ltrim:截断一个索引,返回从start到stop之间的值。包括start和stop。

列表中的第一个元素编号为0,最后一个元素编号为-1。

127.0.0.1:6379> lpush mylist "1"
(integer) 1
127.0.0.1:6379> lpush mylist "0"
(integer) 2
127.0.0.1:6379> LRANGE mylist 0 -1
1) "0"
2) "1"
127.0.0.1:6379> rpush mylist "2"
(integer) 3
127.0.0.1:6379> rpush mylist "3"
(integer) 4
127.0.0.1:6379> LRANGE mylist 0 -1
1) "0"
2) "1"
3) "2"
4) "3"
127.0.0.1:6379> 

获取列表的长度

127.0.0.1:6379> llen mylist
(integer) 4
127.0.0.1:6379>

删除列表中的元素

127.0.0.1:6379> LRANGE mylist 0 -1
1) "0"
2) "1"
3) "2"
4) "3"
127.0.0.1:6379> LPOP mylist
"0"
127.0.0.1:6379> LRANGE mylist 0 -1
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> RPOP mylist
"3"
127.0.0.1:6379> LRANGE mylist 0 -1
1) "1"
2) "2"
127.0.0.1:6379> 

插入数据

127.0.0.1:6379> lrange mylist 0 -1
1) "0"
2) "1"
3) "2"
4) "zhang"
5) "felix"
6) "3"
7) "4"
127.0.0.1:6379> LINSERT mylist before 3 "hello world"
(integer) 8
127.0.0.1:6379> LRANGE mylist 0 -1
1) "0"
2) "1"
3) "2"
4) "zhang"
5) "felix"
6) "hello world"
7) "3"
8) "4"
127.0.0.1:6379> 

修改指定索引处的值:

127.0.0.1:6379> lrange mylist 0 -1
1) "zhang"
2) "world"
127.0.0.1:6379> lset mylist 0 hello
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "world"
127.0.0.1:6379> lrange mylist 2 fail
(error) ERR value is not an integer or out of range
127.0.0.1:6379> 

ltrim截断一个索引:

127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "world"
3) "this"
4) "is"
5) "a"
6) "list"
127.0.0.1:6379> LTRIM mylist 0 1
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "world"
127.0.0.1:6379> 

集合

redis的集合是一种无序集合(不会按照添加的顺序显示),集合中的元素没有先后顺序。集合中的元素不能重复。集合中的元素为字符串。

sadd:往集合中添加一个或多个新的元素。
smembers:列出集合中的所有元素。
spop:随机删除集合中的一个元素。
srem: 从集合中删除一个或多个元素,不存在的元素会忽略。
sismember:判断一个元素是不是集合中的元素。返回值为1,表示true,返回值为0,表示false。
scard:返回集合中元素的个数。

sinter:求两个或多个集合的交集。
sunion:求两个或多个集合的并集。
sdiff:求两个或多个集合的差集。

sinterstore、sunionstore和sdiffstore可以将交集、并集、差集的结果存储到一个新的集合中。

添加元素、删除元素、列出集合中的元素

添加元素:
127.0.0.1:6379> sadd myset zhang
(integer) 1
127.0.0.1:6379> sadd myset wang li zhao
(integer) 3
127.0.0.1:6379> 

删除元素:
127.0.0.1:6379> SMEMBERS myset
1) "zhou"
2) "zhao"
3) "li"
4) "zheng"
5) "zhang"
6) "wu"
127.0.0.1:6379> SREM myset zhou wu zheng wang hello
(integer) 3
127.0.0.1:6379> SMEMBERS myset
1) "zhao"
2) "li"
3) "zhang"
127.0.0.1:6379> 


列出集合中的元素:
127.0.0.1:6379> SMEMBERS myset
1) "zhang"
2) "zhao"
3) "wang"
4) "li"
127.0.0.1:6379> 

判断元素是否是集合中的元素:
127.0.0.1:6379> SMEMBERS myset
1) "zhao"
2) "li"
3) "zhang"
127.0.0.1:6379> SISMEMBER myset 'zhang'
(integer) 1
127.0.0.1:6379> SISMEMBER myset 'wang'
(integer) 0
127.0.0.1:6379> 

集合中元素的个数:
127.0.0.1:6379> SCARD myset
(integer) 3
127.0.0.1:6379> 



集合的交集:SINTER
127.0.0.1:6379> SMEMBERS myset1
1) "zhao"
2) "li"
3) "zhang"
127.0.0.1:6379> sadd myset2 felix zhang zhao
(integer) 3
127.0.0.1:6379> SINTER myset1 myset2
1) "zhao"
2) "zhang"
127.0.0.1:6379> 


集合的并集:SUNION
127.0.0.1:6379> SMEMBERS myset1
1) "zhao"
2) "li"
3) "zhang"
127.0.0.1:6379> SMEMBERS myset2
1) "zhang"
2) "felix"
3) "zhao"
127.0.0.1:6379> SUNION myset1 myset2
1) "felix"
2) "zhang"
3) "zhao"
4) "li"
127.0.0.1:6379> 


集合的差集:SDIFF
127.0.0.1:6379> SMEMBERS myset1
1) "zhao"
2) "li"
3) "zhang"
127.0.0.1:6379> SMEMBERS myset2
1) "zhang"
2) "felix"
3) "zhao"
127.0.0.1:6379> SDIFF myset1 myset2
1) "li"
127.0.0.1:6379> 
127.0.0.1:6379> SDIFF myset2 myset1
1) "felix"
127.0.0.1:6379> 

有序集合

有序集合中的元素也是字符串,集合中的元素也不能重复。有序集合中的每个元素都会关联一个score,score的主要作用用于排序。

zadd:添加元素。如果元素已经存在,则更新score。
zrem:删除一个或元素。
zcard:获取有序集合的元素个数。
zrange:获取索引在start到stop之间的元素值。还可以使用WITHSCORES显示score的值。(score从低到高)。索引是根据score值来定的
zrevrange:实现的功能和zrange一样,score是从高到低。
zcount:获取score在start和stop之间的元素个数。
zrangebyscore:获取score位于start和stop之间的元素值。也可以跟上WITHSCORES显示他们的score。start为min,stop为max。
zrevrangebyscore:获取score位于start和stop之间的元素值。start为max,stop为min。
zscore:返回元素的score值。
zrank:返回元素的索引值。
zrevrank:反向查询元素的索引值。

添加元素:
127.0.0.1:6379> ZADD myzset 10 baidu.com
(integer) 1
127.0.0.1:6379> ZADD myzset 20 jd.com 30 google.com
(integer) 2
127.0.0.1:6379> 

获取zset的元素个数:
127.0.0.1:6379> ZCARD myzset
(integer) 3
127.0.0.1:6379> 

获取从start到stop之间的元素:
127.0.0.1:6379> zrange myzset 0 -1
1) "baidu.com"
2) "jd.com"
3) "google.com"
127.0.0.1:6379> zrange myzset 0 -1 WITHSCORES
1) "baidu.com"
2) "10"
3) "jd.com"
4) "20"
5) "google.com"
6) "30"
127.0.0.1:6379> 

获取score在start和stop之间的元素个数:
127.0.0.1:6379> ZCOUNT myzset 10 20
(integer) 2
127.0.0.1:6379>

获取score位于start和stop之间的元素:
127.0.0.1:6379> ZRANGEBYSCORE myzset 10 20 
1) "baidu.com"
2) "jd.com"
127.0.0.1:6379> ZRANGEBYSCORE myzset 10 20 withscores
1) "baidu.com"
2) "10"
3) "jd.com"
4) "20"
127.0.0.1:6379> 

查看元素的score值:
127.0.0.1:6379> ZSCORE myzset jd.com
"20"
127.0.0.1:6379> 

查看元素的索引:
127.0.0.1:6379> ZRANK myzset jd.com
(integer) 1
127.0.0.1:6379> ZRANK myzset google.com
(integer) 2
127.0.0.1:6379> ZRANK myzset google
(nil)
127.0.0.1:6379> 


哈希

redis的hash是filed和value的映射。

hset:创建一个hash类型的key,并添加或修改field和value。
hmset:创建一个hash类型的key,可以添加一个或多个field和value。

hget:返回hash表的某个field所对应的value。
hmget:返回hash表的某个或某些field所对应的value。

hlen:返回hash表的长度。
hkeys:返回hash表的所有key。
hvals:返回hash表的所有value。
hgetall:返回hash表的所有key和value。

hexists:判断hash表的某个field是否存在。返回1表示存在,0表示不存在。

hdel:删除hash表中的一个或多个field。对于不存在的field将会忽略。

创建一个hash,并添加field和value:
127.0.0.1:6379> hset myhash username felix
(integer) 1
127.0.0.1:6379> 

创建包含多个field和value的hash表:
127.0.0.1:6379> hmset myhash password 123456 age 27
OK
127.0.0.1:6379> 

获取hash表的field所对应的value:
127.0.0.1:6379> HGET myhash age
"27"
127.0.0.1:6379> HMGET myhash username age
1) "felix"
2) "27"
127.0.0.1:6379> 


返回hash表的长度:
127.0.0.1:6379> HLEN myhash
(integer) 1
127.0.0.1:6379> 

返回hash表中的所有key和value:
127.0.0.1:6379> HKEYS myhash
1) "username"
2) "password"
3) "age"
127.0.0.1:6379> HVALS myhash
1) "felix"
2) "123456"
3) "27"
127.0.0.1:6379> 
127.0.0.1:6379> HGETALL myhash
1) "username"
2) "felix"
3) "password"
4) "123456"
5) "age"
6) "27"
127.0.0.1:6379> 

判断hash表中是否存在某个field:
127.0.0.1:6379> HEXISTS myhash salary
(integer) 0
127.0.0.1:6379> HEXISTS myhash username
(integer) 1
127.0.0.1:6379> 

删除一个或多个field:
127.0.0.1:6379> HDEL myhash age password
(integer) 2
127.0.0.1:6379> HGETALL myhash
1) "username"
2) "zhang"
127.0.0.1:6379> HDEL myhash test
(integer) 0
127.0.0.1:6379> HGETALL myhash
1) "username"
2) "zhang"
127.0.0.1:6379> 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值