简言之:redis
redis 是一个开源的,高性能的,基于键值对的缓存存储系统。经过提供多种键值数据类型来适应不一样的场景下的缓存存储需求。同时redis的诸多高级功能使其能够胜任消息队列,任务队列等不一样的角色。缓存
是redis最基本的类型,能存任何形式的字符串,包括二进制数据。一个string类型的key容许存储的最大容量是512MB,但劝你别这么干(存很大的数据),毕竟redis会把数据都加载到内存。post
在这个键foo存一个bar值,或者更新foo里面的存的值为bar:性能
SET foo bar网站
获取这个foo里面的值, 你将获得字符串bar:索引
GET foo队列
当键值里面存的是数字,可使用命令递增数字:内存
INCR foorem
它返回的是递增之后的值。若是里面存的不是数字,会报错。字符串
增长指定的整数(返回增长后的值)
INCRBY key increment
减小指定的整数 && 减1(返回减小后的值)
DECRBY key decrement
DECR key
DECRBY key 5 和 INCRBY key -5的效果是同样的。
增长指定的浮点数(返回增长后的值)
INCRBYFLOAT key increment\
在键值尾部追加字符串(返回追加后的总长度)
APPEND key value
获取键值字符串长度
STRLEN key
同时设置 || 得到多个键值
MSET key1 value1 key2 value2
MGET key1 key2
若是咱们存的数据有多个部分组成,好比标题,做者,正文。这时候用散列比较合适了。散列类型的键值是一种字典结构,其存储了字段和字段值的映射。一个散列类型键最多能够包含2^32-1个字段。技术上并不要求每一个key存的字段都是一致的,如:key0里面存的字段是title,author; key1里面存的字段是content,title。
赋值&&取值
HSET key field1 value1
HGET key field1
同时设置 && 获取多个字段的值 && 获取全部字段和它们的值
HMSET key field1 value1 field2 value2
HMGET key field1 field2
HGETALL key
字段是否存在(不存在返回0,不然1):
HEXISTS key field
字段不存在时赋值(返回值与HEXISTS相反):
HSETNX key field value
增长数字(返回增长后的值):
HINCRBY key field increment
删除字段(返回被删的字段个数):
HDEL key field1 field2 ...
只获取字段名 || 字段值
HKEYS key
HVALS key
得到字段数量
HLEN key
列表类型能够存储有序的字符串列表,常见的操做是向列表两端添加元素,或者获取列表的某个片断。它是由双向链表实现的,因此向两端添加元素的时间复杂度是O(1),获取越近两端的元素速度越快。这种特性使它能快速完成下面场景:如社交网站的新鲜事,咱们只关心最新的内容,即便里面的数据几千万个,咱们要找最新的100条也是很快的。一个列表类型的键最多能容纳2^32-1个元素。命令:
LPUSH key value1 value2
RPUSH key value1 value2
LPOP key
RPOP key
LLEN key
LRANGE key start stop
LRANGE支持负索引,-1表示最右边的元素,以此类推。
LREM key count value
将会删除列表中前count个值为value的元素。
LINDEX key index
LSET key index value
LTRIM key start stop
LINSERT key BEFORE|AFTER value1 value2
在列表中从左到右查找值为value1的元素,而后根据第二个参数before仍是after来肯定value2插在前面仍是后面。
RPOPLPUSH source destination
从名字就能够看出它的功能:先从source列表类型键的右边弹出一个元素,而后将其加入到destination列表类型键的左边,并返回这个元素的值,整个过程是原子的。
行为很像高中数学课教过的集合。它每一个元素是不一样的,且没有顺序,一个集合类型的键最多能够存2^32-1个字符串。redis集合内部是使用值为空的散列表实现的,因此向集合中加入元素,删除元素,判断元素是否存在,这些操做的时间复杂度都是O(1)。最方便的是多个集合之间能够取交集,并集,差集。
命令:
SADD key value1 value2 ...
SREM key value1 value2 ...
SMEMBERS key
SISMEMBER key value
SDIFF key0 key1 key2 ...
这个例子的意思是:先求key0有而key1没有的元素集合keyTmp,而后再求keyTmp有而key2没有的元素集合。
SINTER key0 key1 key2 ...
求在三个几个都存在的元素集合。
SUNION key0 key1 key2 ...
SCARD key
SDIFFSTORE destination key0 key1 key2 ...
将key0 key1 key2的差集存到destination键中。
SINTERSTORE destination key0 key1 key2 ...
将key0 key1 key2的交集存到destination键中。
SUNIONSTORE destination key0 key1 key2 ...
将key0 key1 key2的并集存到destination键中。
SRANDMEMBER key [count]
SPOP key
与Set的区别就是‘有序’二字。 在集合的基础上,有序集合为每一个元素都关联了一个分数,这使得咱们不只能够完成插入删除,判断元素是否存在等操做,还能够得到分数最高(或最低)的前N个元素,得到指定分数范围内的元素等。元素是不一样的,可是它们分数能够相同。
命令:
ZADD key score1 value1 score2 value2 ...
若是元素已经存在则会替换元素的分数。分数是整数或者浮点数。
ZSCORE key value
ZRANGE key start stop [WITHSCORES]
ZREVRANGE key start stop [WITHSCORES]
ZRANGE 命令会按照元素从小到大的顺序返回索引从start到stop之间的元素,加上WITHSCORES会返回分数。ZREVRANGE则是从大到小的顺序。
ZRANGEBYSCORE key min max [WITHSCORES] [limit offset count]
ZREVRANGEBYSCORE key min max [WITHSCORES] [limit offset count]
按照分数从小到大的顺序,返回分数在min到max之间的元素。若是但愿分数范围不包含端点值,能够这样:
ZRANGEBYSCORE key 80 (100
limit,offset的用法与SQL相同。即,在得到的元素基础上向后偏移offset个元素,而且只获取前count个。好比:
ZRANGEBYSCORE key 80 100 limit 1 3
ZREVRANGEBYSCORE则是从大到小的顺序。
ZINCRBY key increment value
ZCARD key
ZCOUNT key min max
要用开区间就用'('
ZREM key value1 value2 ...
ZREMRANGEBYRANK key start stop
按照从小到大的顺序,删除排名在start stop之间的元素,索引从0开始。
ZREMRANGEBYSCORE key min max
要开区间,则用'(',好比
ZREMRANGEBYSCORE key 80 (100
ZRANK key value
ZREVRANK key value
ZRANK从小到大,ZREVRANK从大到小,排名从0开始。