Java进阶指南|Redis存储Key设计实现方式,Redis实战和核心原理详解:Redis简介( 三 )


文章图片
LPUSH和RPUSH命令分别用于将元素推入列表的左端和右端;LPOP和RPOP命令分别用于从列表的左端和右端弹出元素 , 也就是删除元素;
其中对于LRANGE命令来说 , 使用0为范围的起始索引 , -1为范围的结束索引 , 可以取出列表包含元素的所有元素 。
(2)除了上边比较常用的命令之外 , Redis列表还可以从列表里边移除元素、将元素插入列表中间、将列表修剪至指定长度的命令 , 以及一些其他命令 。
(3)使用场景:
微博TimeLine
消息队列
三、Set集合类型
Redis的集合和列表都可以存储多个字符串 , 他们的不同支持在于 , 列表可以存储多个相同的字符串 , 而集合通过使用散列表来保证自己存储的每个字符串都是各不相同的 。
Redis的集合使用的是无序的方式存储元素 , 所以不可以像List列表那样 , 将元素推入集合的某一端 , 或者从集合的某一端弹出元素 。
一个Set集合类型的实例 , 各不相同的元素 , 无序排列:
Java进阶指南|Redis存储Key设计实现方式,Redis实战和核心原理详解:Redis简介
文章图片
(1)常用命令如下:
Java进阶指南|Redis存储Key设计实现方式,Redis实战和核心原理详解:Redis简介
文章图片
(2)除了常见的命令之外 , 还有交集、并集、差集的计算 , 如下:
Java进阶指南|Redis存储Key设计实现方式,Redis实战和核心原理详解:Redis简介
文章图片
(3)使用场景:
共同好友、二度好友
利用唯一性 , 可以统计访问网站的所有独立IP
好友推荐的时候 , 根据tag求交集 , 大于某个threshold就可以推荐
四、Hash散列类型
Redis的散列可以存储多个键值对之间的映射 。 和字符串一样 , 散列存储的值既可以是字符串又可以是数字值 , 并且用户同样可以对散列存储的数字执行自增操作或者是自减操作 。
一个List散列类型的实例 , 是一个包含两个键值对的散列键:
Java进阶指南|Redis存储Key设计实现方式,Redis实战和核心原理详解:Redis简介
文章图片
(1)常用命令如下:
Java进阶指南|Redis存储Key设计实现方式,Redis实战和核心原理详解:Redis简介
文章图片
(2)其他命令包含添加和删除键值对的命令、获取所有键值对的命令、以及对键值对的值进行自增和自减操作的命令 , 如下所示:
Java进阶指南|Redis存储Key设计实现方式,Redis实战和核心原理详解:Redis简介
文章图片
五、Redis的有序集合ZSet数据类型
有序集合和散列一样 , 用于存储键值对;有序集合的键被称为成员member , 每一个成员都是独一无二的;而有序集合的值被称为分值score , 分值必须是浮点数 。
有序集合是Redis里面唯一一个既可以根据成员访问元素 , 又可以根据分值以及分值的排序来访问元素的结构 。
一个有序集合类型的实例 , zset-key是一个包含两个元素的有序集合键:
Java进阶指南|Redis存储Key设计实现方式,Redis实战和核心原理详解:Redis简介
文章图片
(1)常用命令如下:
Java进阶指南|Redis存储Key设计实现方式,Redis实战和核心原理详解:Redis简介
文章图片
Redis存储Key的一种设计实现方式:模式匹配
Redis是Key-Value数据库 , 存储的时候需要一个唯一的Key值 , 查询的时候根据根据key值进行查询 , 但是Redis毕竟只是key-value存储 , 所以有很多局限性 。 例如:
(1)无法实现多条件组合的查询 , 如:age>25ANDnamelike'A%'
硬要实现的话需要多条命令并计算并集或交集 。
(2)模糊查询中文比较费劲;
因此 , 如何设计一个合适的Key来优化我们的查询操作 , 是一个比较有意义的事情 。


推荐阅读