Redis 支持多种类型的数据结构,如字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial)索引半径查询,能够参考官方文档:数据类型定义。本文详细介绍五种经常使用基本数据类型的使用方法。命令介绍也只是列举了基本的命令基本格式,至于具体的使用示例,能够参考Redis官方文档:Redis命令大全 ,
redis
字符串是Redis中最基本的数据类型,它可以存储任何类型的字符串,包含二进制数据。能够用于存储邮箱,JSON化的对象,甚至是一张图片,一个字符串容许存储的最大容量为512MB。字符串是其余四种类型的基础,与其余几种类型的区别从本质上来讲只是组织字符串的方式不一样而已。数据结构
GET key
INCR key
INCRBY key increment
,意思是key自增increment,increment能够为负数,表示减小。DECR key
DECRBY key decrement
,意思是key自减decrement,decrement能够为正数,表示增长。INCRBYFLOAT key increment
APPEND key value
STRLEN key
MSET key1 value1 [key2 value2 ...]
MGET key1 [key2 ...]
GETBIT key offset
SETBIT key offset value
BITCOUNT key [start end]
BITOP OP desKey key1 key2
BITPOS key 0/1 [start, end]
散列类型至关于Java中的HashMap,他的值是一个字典,保存不少key,value对,每对key,value的值个键都是字符串类型,换句话说,散列类型不能嵌套其余数据类型。一个散列类型键最多能够包含2的32次方-1个字段。app
HSET key field value
HMSET key field1 value1 [field2 values]
HSET key field
HMSET key field1 [field2]
HGETALL key
HEXISTS key field
HSETNX key field value
HINCRBY key field increment
HDEL key field
HKEYS key
HVALS key
HLEN key
列表类型(list)用于存储一个有序的字符串列表,经常使用的操做是向队列两端添加元素或者得到列表的某一片断。列表内部使用的是双向链表(double linked list)实现的,因此向列表两端添加元素的时间复杂度是O(1),获取越接近列表两端的元素的速度越快。可是缺点是使用列表经过索引访问元素的效率过低(须要从端点开始遍历元素)。因此列表的使用场景通常如:朋友圈新鲜事,只关心最新的一些内容。借助列表类型,Redis还能够做为消息队列使用。spa
LPUSH key value
RPUSH key value
LPOP key
RPOP key
LLEN key
LRANGE key start stop
,index从0开始,-1表示最后一个元素LREM key count value
,删除列表中前count个值为value的元素,当count>0时从左边开始数,count<0时从右边开始数,count=0时会删除全部值为value的元素LINDEX key index
LSET key index value
LTRIM key start stop
,包含start和stopLINSERT key BEFORE|AFTER privot value
,从左边开始寻找值为privot的第一个元素,而后根据第二个参数是BEFORE仍是AFTER决定在该元素的前面仍是后面插入valueRPOPLPUSH source destination
集合在概念在高中课本就学过,集合中每一个元素都是不一样的,集合中的元素个数最多为2的32次方-1个,集合中的元素师没有顺序的。code
SADD key value1 [value2 value3 ...]
SREM key value2 [value2 value3 ...]
SMEMBERS key
SISMEMBER key value
SDIFF key1 key2 [key3 ...]
,先计算key1和key2的差集,而后再用结果与key3作差集SINTER key1 key2 [key3 ...]
SUNION key1 key2 [key3 ...]
SCARD key
SDIFFSTORE destination key1 key2 [key3 ...]
SINTERSTORE destination key1 key2 [key3 ...]
SUNIONSTORE destination key1 key2 [key3 ...]
SRANDMEMBER key [count]
,当count>0时,会随机中集合中获取count个不重复的元素,当count<0时,随机中集合中获取|count|和可能重复的元素。SPOP key
有序集合类型与集合类型的区别就是他是有序的。有序集合是在集合的基础上为每个元素关联一个分数,这就让有序集合不只支持插入,删除,判断元素是否存在等操做外,还支持获取分数最高/最低的前N个元素。有序集合中的每一个元素是不一样的,可是分数却能够相同。有序集合使用散列表和跳跃表实现,即便读取位于中间部分的数据也很快,时间复杂度为O(log(N)),有序集合比列表更费内存。对象
ZADD key score1 value1 [score2 value2 score3 value3 ...]
ZSCORE key value
ZRANGE key start stop [WITHSCORE]
,按照元素从小到大的顺序排序,从0开始编号,包含start和stop对应的元素,WITHSCORE选项表示是否返回元素分数ZREVRANGE key start stop [WITHSCORE]
,和上一个命令用法同样,只是这个倒序排序的。ZRANGEBYSCORE key min max
,包含min和max,(min
表示不包含min,(max
表示不包含max,+inf
表示无穷大ZINCRBY key increment value
ZCARD key
ZCOUNT key min max
,min和max的用法和5中的同样ZREM key value1 [value2 ...]
ZREMRANGEBYRANK key start stop
ZREMRANGEBYSCORE key min max
,min和max的用法和4中的同样ZRANK key value
ZREVRANK key value
ZINTERSTORE destination numbers key1 key2 [key3 key4 ...] WEIGHTS weight1 weight2 [weight3 weight4 ...] AGGREGATE SUM | MIN | MAX
,numbers表示参加运算的集合个数,weight表示权重,aggregate表示结果取值