redis常用知识汇总( 二 )


 
数据类型
Redis有哪些数据类型
Redis主要有5种数据类型 , 包括String , List , Set , Zset , Hash , 满足大部分的使用要求
数据类型
可以存储的值
操作
应用场景
STRING
字符串、整数或者浮点数
对整个字符串或者字符串的其中一部分执行操作
对整数和浮点数执行自增或者自减操作
做简单的键值对缓存
LIST
列表
从两端压入或者弹出元素
对单个或者多个元素进行修剪 , 
只保留一个范围内的元素
存储一些列表型的数据结构 , 类似粉丝列表、文章的评论列表之类的数据
SET
无序集合
添加、获取、移除单个元素
检查一个元素是否存在于集合中
计算交集、并集、差集
从集合里面随机获取元素
交集、并集、差集的操作 , 比如交集 , 可以把两个人的粉丝列表整一个交集
HASH
包含键值对的无序散列表
添加、获取、移除单个键值对
获取所有键值对
检查某个键是否存在
结构化的数据 , 比如一个对象
ZSET
有序集合
添加、获取、删除元素
根据分值范围或者成员来获取元素
计算一个键的排名
去重但可以排序 , 如获取排名前几名的用户
 
Redis的应用场景
总结一
计数器
可以对 String 进行自增自减运算 , 从而实现计数器功能 。Redis 这种内存型数据库的读写性能非常高 , 很适合存储频繁读写的计数量 。
缓存
将热点数据放到内存中 , 设置内存的最大使用量以及淘汰策略来保证缓存的命中率 。
会话缓存
可以使用 Redis 来统一存储多台应用服务器的会话信息 。当应用服务器不再存储用户的会话信息 , 也就不再具有状态 , 一个用户可以请求任意一个应用服务器 , 从而更容易实现高可用性以及可伸缩性 。
全页缓存(FPC)
除基本的会话token之外 , Redis还提供很简便的FPC平台 。以Magento为例 , Magento提供一个插件来使用Redis作为全页缓存后端 。此外 , 对wordPress/ target=_blank class=infotextkey>WordPress的用户来说 , Pantheon有一个非常好的插件 wp-redis , 这个插件能帮助你以最快速度加载你曾浏览过的页面 。
查找表
例如 DNS 记录就很适合使用 Redis 进行存储 。查找表和缓存类似 , 也是利用了 Redis 快速的查找特性 。但是查找表的内容不能失效 , 而缓存的内容可以失效 , 因为缓存不作为可靠的数据来源 。
消息队列(发布/订阅功能)
List 是一个双向链表 , 可以通过 lpush 和 rpop 写入和读取消息 。不过最好使用 Kafka、RabbitMQ 等消息中间件 。
分布式锁实现
在分布式场景下 , 无法使用单机环境下的锁来对多个节点上的进程进行同步 。可以使用 Redis 自带的 SETNX 命令实现分布式锁 , 除此之外 , 还可以使用官方提供的 RedLock 分布式锁实现 。
其它
Set 可以实现交集、并集等操作 , 从而实现共同好友等功能 。ZSet 可以实现有序性操作 , 从而实现排行榜等功能 。
总结二
Redis相比其他缓存 , 有一个非常大的优势 , 就是支持多种数据类型 。
数据类型说明string字符串 , 最简单的k-v存储hashhash格式 , value为field和value , 适合ID-Detail这样的场景 。list简单的list , 顺序列表 , 支持首位或者末尾插入数据set无序list , 查找速度快 , 适合交集、并集、差集处理sorted set有序的set
其实 , 通过上面的数据类型的特性 , 基本就能想到合适的应用场景了 。
string——适合最简单的k-v存储 , 类似于memcached的存储结构 , 短信验证码 , 配置信息等 , 就用这种类型来存储 。
hash——一般key为ID或者唯一标示 , value对应的就是详情了 。如商品详情 , 个人信息详情 , 新闻详情等 。
list——因为list是有序的 , 比较适合存储一些有序且数据相对固定的数据 。如省市区表、字典表等 。因为list是有序的 , 适合根据写入的时间来排序 , 如:最新的*** , 消息队列等 。


推荐阅读