引言
在Redis学习笔记(一)中我们已经会安装并且简单使用Redis了,接下来我们一起来学习下Redis支持的5大数据类型。
简介
Redis是REmote DIctionary Server(远程字段服务器)的缩写,它以字典结构存储数据,并允许其他应用通过TCP协议读写字典中的内容。同大多数脚本语言中的字典一样,Redis字典中的键值除了可以是字符串,还可以是其他的数据类型。到目前为止Redis支持的键值数据类型如下:
(1)字符串类型(String)
(2)散列类型(Hash)
(3)列表类型(List)
(4)集合类型(Set)
(5)有序集合类型(SortedSet)
在学习这5种数据类型之前,我们先了解几个基础的命令来热身。
1)KEYS pattern
此命令用来获取复核规则的键名列表,pattern支持glob风格通配符格式,具体规则如下图:
下图的例子中,SELECT 0 表示选择0号数据库,KEYS * 表示查询所有的key,KEYS foo* 表示查询所有以foo开头的key。
2)EXISTS key
此命令用来判断一个键是否存在。存在返回1,不存在返回0。实例如下图:
3)TYPE key
此命令用来获取键值的数据类型,返回值可以是以上提到的5种数据类型。
通过上面的简单命令,相信大家已经对Redis有了个初步的认识。下面来详细的介绍各个类型所涉及的命令。
一、字符串类型(String)
1.介绍
字符串类型是Redis中最基础的数据类型,它能存储任何的字符串,包括二进制数据。你也可以用它来存储用户的邮箱、JSON对象和图片等。一个字符串类型键允许存储的数据的最大容量是512M。字符串类型也是其他4种数据类型的基础,只能说他们的组织字符串的形式不同罢了。
2.基本命令
1)赋值与取值
SET key value 此命令用来赋值,如果key存在,则会覆盖原有的value值;如若不存在则会新建一个key,赋值为value。
GET key 此命令用来取值,如果key存在,则返回原有的value;不存在则返回nil。
2)递增或递减整数
当存储的字符串是整数形式时,以下命令才会有实际作用,否则Redis会提示错误:
INCR key INCRBY key increment
INCR key命令用来使key的当前值(整数)递增,并返回递增后的值。当要操作的键不存在时会默认值为0。
INCRBY key increment 命令与 INCR 命令基本一样,INCRBY key increment命令可以通过increment参数来控制每次递增的值。示例如下:
DECR key DECRBY key increment 这两命令与以上两个命令用法一致,此处不再赘述。
3)增加指定浮点数
INCRBYFLOAT key increment
INCRBYFLOAT 命令类似INCRBY命令,差别是INCRBYFLOAT命令可以增加一个双精度浮点数。示例如下:
4)向尾部增加值
APPEND key value
此命令是像键值的末尾追加value。返回值为追加后的字符串的长度。如果key不存在则新增一个键为key,它的值为value。
5)获取字符串的长度
STRLEN key
此命令返回键值的长度。
6)同时获取或者设置多个键值
MSET key value [key1 value1 key2 value2 ...] MGET key[key1 key2 ...]
7)位操作
GETBIT key offset SETBIT key offset value
BITCOUNT key [start] [end]
BITOP oppration destkey key [key1 key2 ...]
一个字节由8个二进制组成,上面4个命令可以直接对二进制位进行操作。由于此命令在开发中不太常用,此处不再赘述,如有兴趣,大家可参考《REDIS入门指南》的30页。
二、散列类型(Hash)
1.介绍
Hash存储了字段和字段值的映射,但字段值只能是字符串类型,也就是说,散列类型不支持嵌套其他的数据类型。一个散列类型键至多可以包含 2的32次方减1 个字段。散列类型很适合存储对象,使用对象类别和ID组成键名,字段名来表示对象属性名,字段值来存储属性值。例如要存储ID为2的汽车:
注:Redis的其他数据类型同样也不支持数据类型嵌套。
2.命令
1)赋值与取值
HSET key field value HGET key field
HMSET key field value [field1 value1 ...] HMGET key field [field1...]
HGETALL key
在上述命令中key表示Hash键值的键名,field表示字段名,value则表示字段所对应的字段值。用法与String类型基本一致,此处不再赘述。需要注意的是,HSET命令不区分插入和更新操作。当执行插入操作时返回值为1,当执行更新操作时返回值为0。更进一步,当键不存在时,HSET命令还会自动创建它。
特别的,HGETALL命令适用于想获取键中所有字段和字段值,却又不知道键中有哪些字段时这样的场景。如:
另外,每种数据类型都有属于自己的命令,但是都是基于字符串类型(String)来改变的,如散列类型(Hash)的命令就是H开头的。如果使用一种数据类型的命令去操作另外一种数据类型的话,Redis会提示错误。
2)判断字符串是否存在
HEXISTS key field
此命令用来判断一个字段是否存在,如果存在返回值为1,否则为0。键如果不存在也会返回0。
3)HSETNX key field value
此命令与HSET命令相似,区别在于如果字段已经存在,将不执行任何操作,否则执行HSET key field value 操作。
4)增加数字
HINCRBY key field increment
此命令与String的INCRBY命令用法一致,此处不再赘述。
5)删除字段
HDEL key field [field1 ...]
HDEL 命令可以删除一个或多个字段,返回值是删除的字段的个数。
6)只获取字段或字段值
HKEYS key KVALS key
7)获得字段个数
HLEN key
由于时间问题,今天先更新2个数据类型,后续会继续更新。