简介:
Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:
1、Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
2、Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
3、Redis支持数据的备份,即master-slave模式的数据备份。
String
Redis 字符串数据类型的相关命令用于管理 redis 字符串值
类比Java:HasMap
Object -->
1、字符串(String)
- 基本操作:
SET--存入一个字符串键SETNX--存入一个字符串键,若Key存在则操作失败GET--获取指定Key的字符串MSET--批量存入字符串键MGET--批量获取指定Key的字符串DEL--删除指定Key(所有类型都可以使用此命令)
- 应用场景:
分布式锁:SETNX(Key, Value),释放锁:DEL(Key)
2、数值(Number)
- 基本操作:
INCRBY Key increment--对Key进行数值相加,key不存在则新建DECRBY Key decrement--对Key进行数值相减,key不存在则新建INCR Key--对Key进行自加1,key不存在则新建DECR Key--对Key进行自减1,key不存在则新建
- 应用场景:
文章的浏览量,视频的观看量
全局序列
3、二进制(bit)
- 基本操作:
GETBIT Key offset--获取Key下标offset的值SETBIT Key offset value--对Key下标offset进行设值BITCOUNT Key [start] [end]--统计start到end位置设值为1的数量BITOPS op destkey [key...]--对多个key进行位计算op(AND/OR/XOR/NOT)
- 应用场景:
(1)、存储图片
(2)、用户在线统计
二、HashMap
Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。
类比Java:HashMap>
key - field - value 结构
- 基本操作:
HSET--存入一个key filed 散列结构HSETNX--存入一个key field,若key中filed已经存在则操作失败HGET--获取指定key fieldHMSET--批量存入key filedHMGET--批量获取key filedHDEL--删除指定Key filedHINCRBY--对key field的数值进行加减操作
优点:
- 将信息凝聚在一起,便于管理
- 从一定程度上避免误操作,减少key冲突
- 减少内存/IO/CPU的消耗
应用场景:
- 购物车功能
三、List
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
类比Java:HasMap
- 基本操作:
LPUSH Key value [value...]--往key的列表键中左边放入一个元素,key不存在则新建RPUSH Key value [value...]--往key的列表键中右边放入一个元素,key不存在则新建LPOP Key--从key的列表键最左端弹出一个元素RPOP Key--从key的列表键最右端弹出一个元素LRANGE Key start stop--获取列表键从start下标到stop下标的元素BLPOP Key [Key...] timeout--阻塞的从key的列表键最左端弹出一个元素,若列表键中不存在元素,阻塞等待{timeout}秒,若{timeout}=0,一直阻塞BRPOP Key [Key...] timeout--阻塞的从key的列表键最右端弹出一个元素,若列表键中不存在元素,阻塞等待{timeout}秒,若{timeout}=0,一直阻塞
- 应用场景:
(1) 消息队列
(2) 新闻推荐
四、Set
Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
类比Java:HasMap
- 基本操作:
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中删除
- 应用场景:
(1)、抽奖
(2)、点赞,转发,收藏 - 集合运算:
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
Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员
- 基本操作:
ZADD Key score element [...]--往有序集合键key中存放元素,若key不存在则新建ZREM Key element [element...]--从有序集合键key中删除元素ZSCORE Key element--获取有序集合键key中{element}元素的score值ZINCRBY Key increment element--给有序集合键key中{element}元素进行score值操作,若key不存在则新建,{element}元素不存在则新增后进行score值操作ZCARD Key--获取有序集合键key中元素个数ZRANGE Key start stop [WITHSCORES]--正序获取有序集合键key中从start下标到end下标的元素ZREVRANGE Key start stop [WITHSCORES]--倒序获取有序集合键key中从start下标到end下标的元素
- 集合运算:
ZUNIONSTORE destkey numkeys key [key...]--并集运算ZINTERSTORE destkey numkeys key [key...]--交集运算
应用场景:
- 排行榜,热搜榜
- 周榜,月榜,年榜