命令返回值
在大多数情况下,执行一条命令后我们往往会关心命令的返回值,命令的返回值有5种类型,对于每种类型 redis-cli 的展现结果都不同,下面分别说明:
1. 状态回复
状态回复(status reply)是最简单的一种回复,比如向 Redis 发送 SET 命令设置某个键的值时,Redis 会回复状态 OK 表示设置成功。另外对 PING 命令的回复 PONG 也是状态回复。状态回复直接显示状态信息,如:
2.错误回复
当出现命令不存在或命令格式有错误等情况时 Redis 会返回错误回复(error reply)。错误回复以(error)开头,并在后面跟上错误信息。如执行一个不存在的命令:
在2.6版本时,错误信息均是以“ERR”开头,而在2.8版以后,部分错误信息会以具体的错误类型开头,如:
这里错误信息开头的“WRONGTYPE”就表示类型错误,这个改进使得在调试时能更容易地知道遇到的是哪种类型的错误。
3.整数回复
Redis虽然没有整数类型,但是却提供了一些用于整数操作的命令,如递增键值的 INCR 命令会以整数形式返回递增后的键值。除此之外,一些其他命令也会返回整数,如可以获取当前数据库中键的数量的 DBSIZE 命令等。整数回复(integer reply)以(integer)开头,并在后面跟上整数数据:
4.字符串回复
字符串回复(bulk reply)是最常见的一种回复类型,当请求一个字符串类型键的键值或一个其他类型键中的某个元素时就会得到一个字符串回复。字符串回复以双引号包裹:
特殊情况是当请求的键值不存在时会得到一个空结果,显示为(nil)。如:
5.多行字符串回复
多行字符串回复(multi-bulk reply)同样很常见,如当请求一个非字符串类型键的元素列表时就会收到多行字符串回复。多行字符串回复中的每行字符串都以一个序号开头,如:
Redis 数据类型
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
String(字符串)
string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象
实例
在以上实例中我们使用了 Redis 的 SET 和 GET 命令。键为 name,对应的值为 FirstName。
注意:一个键最大能存储512MB。
Hash(哈希)
Redis hash 是一个键值对集合。Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
实例
以上实例中 hash 数据类型存储了包含用户脚本信息的用户对象。实例中我们使用了 Redis HMSET, HGETALL 命令,user:001 为键值。
注意:每个 hash 可以存储 232 - 1 键值对(40多亿)。
List(列表)
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
实例
新建一个list叫做mylist,并在列表头部插入元素"aa",在mylist右侧插入元素"bb",在mylist左侧插入元素"cc";列出mylist中从编号0到编号1的元素,列出mylist中从编号0到倒数第一个元素
注意:列表最多可存储 232 - 1 元素 (4294967295, 每个列表可存储40多亿)。
Set(集合)
Redis的Set是string类型的无序集合。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。集合相关的操作也很丰富,如添加新元素、删除已有元素、取交集、取并集、取差集等
实例
向集合myset中加入一个新元素"one",列出集合myset中的所有元素,实例中 one 添加了两次,但根据集合内元素的唯一性,第二次插入的元素将被忽略;判断元素 one 是否在集合myset中,返回1表示存在,判断元素 three 是否在集合myset中,返回0表示不存在;新建一个新的集合yourset,列出集合yourset中的所有元素,对两个集合求并集
注意:集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
zset(sorted set:有序集合)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。
实例
新增一个有序集合myzset,并加入一个元素baidu.com,给它赋予的序号是1;向myzset中新增一个元素360.com,赋予它的序号是3;向myzset中新增一个元素google.com,赋予它的序号是2;列出myzset的所有元素,同时列出其序号,可以看出myzset已经是有序的了。zrange myzset 0 -1 只列出myzset的元素
Redis命令参考:http://doc.redisfans.com/
其他问题
1. Redis在使用命令行操作时,如果查看内容中包含中文,会显示16进制的字符串
解决办法:
2. 一个redis实例最多可提供16个数据库,下标从0到15 ,客户端默认连接第一个。下图示例内容包括切换数据库,和移动key