本文介绍redis中的五大基本数据类型及常用命令

数据类型

说明

String

是Redis中最基本的数据类型,二进制安全的,它可以包含任意数据类型。如图片。Redis中String类型的数据上限的512M。

List

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。

Hash

是一个string类型的field和value的映射表,hash特别适合用于存储对象。Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。

Hash

Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

ZSet

有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

启动redis服务并登陆客服端

在线查看redis数据工具_字段

string介绍

通用命令

五种数据类型的数据结构差异所以命令也不同,但是也有一些相通的命令,在这里简单介绍:
创建一个简单的k/v对

127.0.0.1:6379> set name xn
OK

在redis中默认有16个数据库,编号0-15,正常情况下,用户登陆后首先看到的是0号数据库,可以手动换到其他数据库:

select

127.0.0.1:6380> set name zhangsan
OK
127.0.0.1:6380> select 4
OK
127.0.0.1:6380[4]> get name
(nil)
127.0.0.1:6380[4]> select 0
OK
127.0.0.1:6380> get name
"zhangsan"

del命令

该命令用于存在key删除key

127.0.0.1:6379> del name
(integer) 1
127.0.0.1:6379> del name
(integer) 0

dump命令

序列化key,并返回被序列化的值

127.0.0.1:6379> dump name
"\x00\x03dpb\t\x00\xe5\xa2\xc4\xd1\xfc\xb2\xd9\xcb"
127.0.0.1:6379> dump name1
(nil)

如果key不存在就返回nil

exists命令

检查key是否存在

127.0.0.1:6379> exists name
(integer) 1
127.0.0.1:6379> exists name1
(integer) 0

1表示存在,o表示不存在

ttl命令

以秒为单位,返回key的剩余时间

127.0.0.1:6379> ttl name
(integer) -1
127.0.0.1:6379> ttl name1
(integer) -2

-2表示key不存在,-1表示没有设置有效时间,不会过期,我们可以通过EXPIRE key 设置有效时间

expire命令

是指有效时间,单位为秒

127.0.0.1:6379> expire name 120
(integer) 1
127.0.0.1:6379> ttl name
(integer) 112
127.0.0.1:6379> ttl name
(integer) 10
127.0.0.1:6379> ttl name
(integer) 7
127.0.0.1:6379> ttl name
(integer) -2

112是剩余的有效时间

pexpire命令

同样是设置过期时间,只是单位为毫秒

127.0.0.1:6379> pexpire name 100
(integer) 1
127.0.0.1:6379> ttl name
(integer) -2

-2就表示已经不存在了

pttl

和ttl命令一样,只是返回单位为毫秒

127.0.0.1:6379> pexpire name 100000
(integer) 1
127.0.0.1:6379> ttl name
(integer) 91
127.0.0.1:6379> pttl name
(integer) 84601

keys

通过正则表达式查找符合条件的key

127.0.0.1:6379> set age 18
OK
127.0.0.1:6379> set sex 男
OK
127.0.0.1:6379> set address 深圳
OK
127.0.0.1:6379> keys *
1) "age"
2) "address"
3) "sex"

key * 查询所有的key

randomkey命令

从当前数据库随机返回一个key

127.0.0.1:6379> randomkey
"address"
127.0.0.1:6379> randomkey
"age"
127.0.0.1:6379> randomkey
"sex"
127.0.0.1:6379> randomkey
"age"

type命令

返回key对应的数据类型

127.0.0.1:6379> type name
none
127.0.0.1:6379> type age
string
127.0.0.1:6379> type sex
string

不存在的返回none

rename命令

修改key的名称

127.0.0.1:6379> rename age age1
OK
127.0.0.1:6379> exists age
(integer) 0
127.0.0.1:6379> exists age1
(integer) 1

flushdb

清空当前库

flushall

清空所有库

string类型之BIT

Redis中字符串的存储方式都是以二进制的方式存储的。
比如:

127.0.0.1:6379> set k1 a
OK

k1的值为a,对应的ascii码是97,转换为二进制就是01100001。BIT命令就是对这个二进制数据进行操作的

命令

说明

getbit

获取二级制中对应偏移量的值

setbit

设置对应二进制位的值

bitcount

统计二进制中位中为1的个数

bitop

对二进制数据做位元操作,与,或,非,异或操作

bitpos

返回字符串里面第一个被设置为1或者0的bit位

GetBit命令

用于key所储存的字符串值,获取指定偏移量的为(bit)

127.0.0.1:6379> set k1 a
OK
127.0.0.1:6379> getbit k1 0
(integer) 0
127.0.0.1:6379> getbit k1 1
(integer) 1
127.0.0.1:6379> getbit k1 2
(integer) 1
127.0.0.1:6379> getbit k1 3
(integer) 0
127.0.0.1:6379> getbit k1 4
(integer) 0
127.0.0.1:6379> getbit k1 5
(integer) 0
127.0.0.1:6379> getbit k1 6
(integer) 0
127.0.0.1:6379> getbit k1 7
(integer) 1

当偏移量 OFFSET 比字符串值的长度大,或者 key 不存在时,返回 0

SetBit命令

用于对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit),返回的结果是该位上原来的bit值。比如我们设置 k1为a,k2为c,a对应的ASCII码为97(01100001),c对应的ASCII码为99(01100011),相差了一个1,如此我们就可以通过setbit来调整

127.0.0.1:6379> set k2 c
OK
127.0.0.1:6379> get k1
"a"
127.0.0.1:6379> get k2
"c"
127.0.0.1:6379> setbit k1 6 1
(integer) 0
127.0.0.1:6379> get k1
"c"

如此我们就将k1的值快速调整为了c

BitCount命令

用来统计二进制中为1的个数,比如a(97 01100001)为3,c(99 01100011)为4.

127.0.0.1:6379> get k1
"a"
127.0.0.1:6379> get k2
"c"
127.0.0.1:6379> bitcount k1
(integer) 3
127.0.0.1:6379> bitcount k2
(integer) 4

BitOp命令

对一个或多个保存二进制位的字符串 key 进行位元操作,并将结果保存到 destkey 上。BITOP 命令支持 AND(与) 、 OR(或) 、 NOT(非) 、 XOR(异或)运算。比如a 01100001和c 01100011进行相关运算

127.0.0.1:6379> get k1
"a"
127.0.0.1:6379> get k2
"c"
127.0.0.1:6379> bitop and k3 k1 k2
(integer) 1
127.0.0.1:6379> get k3
"a"
127.0.0.1:6379> bitop or k4 k1 k2
(integer) 1
127.0.0.1:6379> get k4
"c"
127.0.0.1:6379> bitop xor k5 k1 k2
(integer) 1
127.0.0.1:6379> get k5
"\x02"

not运算注意参数个数

127.0.0.1:6379> bitop not k6 k1
(integer) 1
127.0.0.1:6379> get k6
"\x9e"

BitPos命令

返回字符串里面第一个被设置为1或者0的bit位。
返回一个位置,把字符串当做一个从左到右的字节数组,第一个符合条件的在位置0,其次在位置8,等等。还是以a为例01100001

127.0.0.1:6379> bitpos k1 1
(integer) 1
127.0.0.1:6379> bitpos k1 0
(integer) 0

其他五个命令就不一一演示

Hash介绍

在实际开发过程中我们肯定会碰到很多需要存储对象的需求,此时hash就比较合适了。hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。
Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。

命令

说明

hset

设置key中字段的值

hget

获取key中字段的值

hmset

批量设置key中的字段

hmget

批量获取key中字段的值

hdel

删除key中指定的字典

hsetnx

设置key中的字段的值,如果字段存在就忽略

hvals

获取key中所有的字段的值

hkeys

获取key中的所有的字段

hgetall

获取key中的所有的字段及值

hexists

判断key中的字段是否存在

hincrby

将key中的字段增加特定的值

hincrbyfloat

和hincrby类似增加的float类型的数据

hlen

获取key中的字段的个数

hstrlen

获取key中某个字段的值得长度

List类型命令介绍

列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。

命令

说明

lpush

向列表头部添加一个或多个元素

lrange

获取列表中指定的元素0第一个,-1最后一个

rpush

向列表尾部添加一个或多个元素

llen

获取列表长度

lset

通过index设置列表的值

rpop

移除列表最后一个元素,并返回

lpop

移除列表头部元素,并返回

lindex

获取列表中对应下标的值

ltrim

截取列表对应的元素

blpop

lpop的阻塞版

brpop

rpop的阻塞版

rpoplpush

移除一个列表的最后一个元素,并将该元素添加到另一个列表的头部

brpoplpush

rpoplpush的阻塞版本

Set集合命令介绍

集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)

命令

说明

sadd

添加一个或多个元素到集合中,如果集合中存在该元素则忽略

scard

返回集合中的元素的个数

sismember

判断集合中是否含有某元素

smembers

获取集合中的所有的元素

srem

删除集合中指定的元素

srandmember

随机返回集合中的元素,版本2.6后在命令之后可以跟一个count。指定随机返回的元素个数

spop

和srandmember类似,只是spop会将获取的元素移除而srandmember不会移除元素

smove

将元素从一个集合移动到另一个集合中

sdiff

返回两个集合的差集

sdiffstore

和sdiff类似,不同的是会将差集结果保存起来

sinter

获取两个集合的交集

sinterstore

和sinter类似,不同的是将结果保存起来了

sunion

获取两个集合的并集

sunionstore

获取两个集合的并集并保存起来

Zset集合命令介绍

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

命令

说明

zadd

向有序集合中添加一个或多个 分数/元素对

zscore

获取有序集合中元素对应的分数

zrange

获取集合中的元素,如果加上withscores则会连同分数一并返回

zrevrange

和zrange类似,只是将结果倒序了

zcard

返回集合中元素的个数

zcount

统计集合中分数在min和max之间的元素个数

zrangebyscore

可以根据score范围查找元素

zrank

获取元素在集合中的排名,从小到大,最小的是0

zrevrank

获取元素在集合中的排序,从大到小

zincrby

给元素增加分数,如果不存在就新创建元素,并赋予对应的分数

zinterstore

计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中

zrem

从集合中弹出一个元素

zlexcount

计算有序集合中指定字典区间内成员数量

zrangebylex

获取指定区间的元素,分数必须相同