Redis是一个完全开源免费,遵守BSD协议,是一个高性能的内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理,也可基于内存亦可持久化的日志型。它支持字符串(String)、哈希表(Hash)、列表(List) 、集合(Set) 、有序集合(sorted sets)等数据类型。
Redis与其它的key-value存储有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。
Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。 不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。 有序集合的成员是唯一的,但分数(score)却可以重复。 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
命令描述ZADD key score1 member1 [score2 member2]向有序集合添加一个或多个成员或更新已存在成员的分数ZCARD key获取有序集合的成员数ZCOUNT key min max计算在有序集合中指定区间分数的成员数ZRANGE key start stop [WITHSCORES]通过索引区间返回有序集合成指定区间内的成员ZRANK key member返回有序集合中指定成员的索引ZREM key member [member …]移除有序集合中的一个或多个成员ZREVRANGE key start stop [WITHSCORES]返回有序集中指定区间内的成员,通过索引,分数从高到底ZSCORE key member返回有序集中,成员的分数值ZREVRANK key member返回有序集合中指定成员的排名,分数值从大到小排序 > 测试代码: > > 127.0.0.1:6379> zadd myset 4 sayhi 5 sayhello 6 saybye //(integer) 3 > 127.0.0.1:6379> zcard myset //(integer) 5 获取有序集合的成员数 > 127.0.0.1:6379> zcount myset 2 3 //(integer) 2 指定区间分数的成员数 > 127.0.0.1:6379> zrange myset 2 3 // 通过索引区间返回有序集合成指定区间内的成员 > 1) "sayhi" > 2) "sayhello" > 127.0.0.1:6379> zrange myset 2 3 withscores > 1) "sayhi" > 2) "4" > 3) "sayhello" > 4) "5" > > 127.0.0.1:6379> zrank myset hi //(integer) 0 返回有序集合中指定成员的索引 > 127.0.0.1:6379> zrem myset sayhi sayhello //(integer) 2 移除有序集合中的一个或多个成员 > 127.0.0.1:6379> zrevrange myset 1 5 //返回有序集中指定区间内的成员,通过索引,分数从高到底 > 1) "hello" > 2) "hi" > 127.0.0.1:6379> zrevrange myset 1 5 withscores > 1) "hello" > 2) "3" > > 127.0.0.1:6379> zscore myset hello //"3" 返回有序集中,成员的分数值 > 127.0.0.1:6379> zrevrank myset hello //(integer) 1 返回有序集合中指定成员的排名,分数值从大到小排序Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。 Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)
命令描述HSET key field value将哈希表 key 中的字段 field 的值设为 valueHMSET key field1 value1 [field2 value2 ]同时将多个 field-value (域-值)对设置到哈希表 key 中HDEL key field2 [field2]删除一个或多个哈希表字段HEXISTS key field查看哈希表 key 中,指定的字段是否存在HGET key field获取存储在哈希表中指定字段的值HGETALL key获取在哈希表中指定 key 的所有字段和值HKEYS key获取所有哈希表中的字段HLEN key获取哈希表中字段的数量HMGET key field1 [field2]获取所有给定字段的值HSETNX key field value只有在字段 field 不存在时,设置哈希表字段的值HVALS key获取哈希表中所有值HSCAN key cursor [MATCH pattern] [COUNT count]迭代哈希表中的键值对 > 测试代码: > > 127.0.0.1:6379> hset sets zhangsan 123 //添加一个键值对(integer) 1 > 127.0.0.1:6379> hmset sets wangwu 123 lisi 123 zhaoliu 123 //添加多个键值对 OK > 127.0.0.1:6379> hget sets wangwu //获取指定key的值 "123" > 127.0.0.1:6379> hgetall sets //获取所有键值对 > 1) "zhangsan" > 2) "123" > 3) "wangwu" > 4) "123" > 5) "lisi" > 6) "123" > 7) "zhaoliu" > 8) "123" > > 127.0.0.1:6379> hkeys sets //获取所有key > 1) "zhangsan" > 2) "wangwu" > 3) "lisi" > 4) "zhaoliu" > > 127.0.0.1:6379> hvals sets //获取所有值 > 1) "123" > 2) "123" > 3) "123" > 4) "123" > > 127.0.0.1:6379> hlen sets //获取key中键值对个数 (integer) 4 > 127.0.0.1:6379> hdel sets lisi //删除指定的key (integer) 1 > 127.0.0.1:6379> hmget sets zhangsan wangwu //获取指定多个key的所有val值 > 1) "123" > 2) "123" > > 127.0.0.1:6379> hsetnx sets lisi 123 //如果字段不存在的时候,添加键值对 (integer) 1 > 127.0.0.1:6379> hsetnx sets lisi lisi //(integer) 0 > 127.0.0.1:6379> hscan sets 0 match *s* //迭代哈希表中的键值对 > 1) "0" > 2) 1) "zhangsan" > 2) "123" > 3) "lisi" > 4) "123"Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边) 一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。
Redis 键命令用于管理 redis 的键。
