Redis 是一个开源的使用 ANSI C 语言编写、遵照 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。数据库
Redis 一般被称为数据结构服务器,由于值(value)能够是字符串(String)、哈希(Hash)、列表(list)、集合(set)和有序集合(sorted set)等类型。json
#经常使用操做 SET key value //存入字符串键值对 MSET key value [key value ...] //批量存储字符串键值对 SETNX key value //当且仅当key不存在,存入value返回1;若key已存在,则不作操做返回0。 GET key //获取一个key对应的value MGET key [key ...] //批量获取字符串键值 DEL key [key ...] //删除键 #原子加减操做 INCR key //将key中存储的数字值(value为string报错)加1 DECR key //将key中存储的数字值(value为string报错)减1 INCRBY key n //将key中存储的数字值加n DECRBY key n //将key中存储的数字值减n
采用String类型的对象缓存有两种方式:1.直接缓存整个对象的json;2.采用将key进行分离为user:ID:属性,采用MSET存储,用MGET获取各属性值。缓存
SET key value [EX seconds] [PX milliseconds] [NX|XX]
EX seconds :设置失效时间,单位秒
PX milliseconds:设置失效时间,单位毫秒
NX : key不存在时设置value,成功返回OK,失败返回nil
XX : key存在时设置value,成功返回OK,失败返回nil
设置key为product:ID过时时间为10s,若是当前key已经存在就会直接返回nil。服务器
#hash经常使用操做 HSET key field value //存储一个哈希表key的键值 HSETNX key field value //存储一个不存在的哈希表key的键值 HMSET key field value [field value...] //在一个哈希表key中存储多个键值对 HGET key field //获取哈希表key对应的field键值 HMGET key field [field ...] //批量获取哈希表key中多个field键值 HDEL key field [field ...] //删除哈希表key中的field键值 HLEN key //返回哈希表key中field的数量 HGETALL key //返回哈希表key中全部的键值 HINCRBY key field n //为哈希表key中field键的值加上增量n
当须要存储的对象不大时,能够采用固定的key,对应的field为ID:属性,采用HMSET的方式,这样就能将全部的对象存储在同一个key中;微信
当须要存储的对象比较大时,能够将key进行动态分离开,例如:设置key为user:序号,序号为0~1000,每一个存储对象根据id%序号,肯定当前对象分配到哪一个key中。网络
定义:用户id为key,商品id为field,商品数量为value数据结构
#List经常使用操做 LPUSH key value [value ...] //将一个或多个值value插入到key列表的表头(最左边),最后的值在最前面 RPUSH key value [value ...] //将一个或多个值value插入到key列表的表尾(最右边) LPOP key //移除并返回key列表的头元素 RPOP key //移除并返回key列表的尾元素 LRANGE key start stop //返回列表key中指定区间内的元素,区间以偏移量start和stop指定,从0开始 BLPOP key [key ...] timeout //从key列表表头弹出一个元素,没有就阻塞timeout秒,若是timeout=0则一直阻塞 BRPOP key [key ...] timeout //从key列表表尾弹出一个元素,没有就阻塞timeout秒,若是timeout=0则一直阻塞
用户A关注了公众号B和公众号C架构
#Set经常使用操做 SADD key member [member ...] //往集合key中存入元素,元素存在则忽略,若key不存在则新建 SREM key member [member ...] //从集合key中删除元素 SMEMBERS key //获取集合key中全部元素 SCARD key //获取集合key中的元素个数 SISMEMBER key member //判断member元素是否存在于集合key中 SRANDMEMBER key [count] //从集合key中随机选出count个元素,元素不从key中删除 SPOP key [count] //从集合key中随机选出count个元素,元素从key中删除 #Set运算操做 SINTER key [key ...] //交集运算 SINTERSTORE destination key [key ...] //将交集结果存入新集合destination中 SUNION key [key ...] //并集运算 SUNIONSTORE destination key [key ...] //将并集结果存入新集合destination中 SDIFF key [key ...] //差集运算 SDIFFSTORE destination key [key ...] //将差集结果存入新集合destination中
#ZSet经常使用操做 ZADD key score member [[score member]...] //往有序集合key中加入带分值元素 ZREM key member [member...] //往有序集合key中删除元素 ZSCORE key member //返回有序集合key中元素member的分值 ZINCREBY key increment member //为有序集合key中元素member的分值加上increment ZCARD key //返回有序集合key中元素个数 ZRANGE key start stop [WITHSCORES] //正序获取有序集合key从start下标到stop下标的元素 ZREVRANGE key start stop [WITHSCORES] //倒序获取有序集合key从start下标到stop下标的元素 #ZSet运算操做 ZUNIONSTORE destkey numberkeys key [key...] //并集计算(相同元素分值相加),numberkeys一共多少个key,WEIGHTS每一个key对应的分值乘积 ZINTERSTORE destkey numberkeys key [key...] //交集计算(相同元素分值相加),numberkeys一共多少个key,WEIGHTS每一个key对应的分值乘积