IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Redis(一) -> 正文阅读

[大数据]Redis(一)

redis是什么?
redis是内存数据库,数据存储在内存中,读写速度很快,广泛应用于缓存。
(Redis 就是一个使用 C 语言开发的数据库,不过与传统数据库不同的是 Redis 的数据是存在内存中的,是内存数据库,所以读写速度非常快,因此 Redis 被广泛应用于缓存方向。)

redis较memcached优势?
redis不仅支持简单的k/v(string),还支持丰富的数据类型,例如 list set hash zset .
redis支持数据的持久化,可以将内存中的数据保存在磁盘中,因此具有灾难恢复机制。
redis原生地支持集群模式。
redis在服务器内存使用完之后,可以把不用的数据存到磁盘中。
redis单线程,多路io复用。
redis支持发布订阅模型、lua脚本、事务等功能。
redis对过期的数据使用惰性删除和定期删除。

为什么要用缓存(redis)?
为了获取高性能和高并发:提升用户体验(高性能),应对更多的用户请求(高并发)
高性能:将用户经常访问并且不会经常改变的数据存入缓存中,用户请求从缓存中直接获取数据,比从数据库中速度快。但是要保持数据库和缓存数据的一致性,数据库中的数据发生更改时,缓存中的数据要同步更新。
高并发:一般4C8G 的mysql数据库服务器的qps(query per seconds)在1w左右,而redis服务器的qps通常可以达到10w+。将一部分数据存入缓存中,则系统能够承受更多的请求数量,提高系统并发性能。

缓存数据的处理流程?
如果用户请求的数据在缓存中能够找到,就返回缓存数据;
缓存中不存在,就去数据库中查找;
如果数据库中存在,将数据返回给用户,并更新缓存数据(存入高频访问数据);
如果数据库中不存在,返回null。

redis除了缓存还有哪些功能?
分布式锁 分布式锁中的王者方案 - Redisson
限流 redis+lua脚本实现限流 redis分布式限流器
消息队列
复杂业务场景 比如 利用bitmap统计活跃用户,通过sorted set维护排行榜。

redis常见数据结构以及使用场景分析:
string:
结构:简单动态字符串SDS。是二进制安全的,可以保存二进制数据,并且是安全的,不会造成缓冲区溢出,获取字符串长度的复杂度为O(1)。
场景:用于需要计数的场景。比如 用户的访问次数,热点文章的点赞转发数量。
计数器:字符串为整数时可以使用。incr 加一; decr 减一
过期:数据默认永不过期。ttl 返回结果 -1代表永不过期
expire key seconds 设置过期时间; setex key seconds value 设置过期时间与key value; ttl key 查看过期时间

list: 字符串列表
结构:双向链表。对于首尾节点的操作效率较高,对于中间节点的操作效率较低。对比数组,易于插入删除,但是随机访问困难。
应用场景:发布与订阅 简单消息队列 慢查询。
实现队列:lpush + rpop
实现栈:lpush + lpop
实现分页查询:lrange key start stop start开始下标 stop结束下标; 0 ~ -1表示查询所有元素

hash:
redis - hash
结构:ziplist(压缩列表),hashtable(哈希表)。当field-value长度较短且个数较少时,使用ziplist,否则使用hashtable。
哈希表由 数组+链表 实现
hash是String类型的field和value映射表,特别适合用于存储对象。redis本身就是key:value存储方式 , 此时的hash作为redis中value的一种类型。
应用场景:存储对象、购物车、计数器

set:
Java中HashSet的内部实现使用的是HashMap,只不过所有的value都指向同一个对象。Redis的set结构内部也使用hash结构(哈希表),所有的value都指向同一个内部值。
set适用于存储无序、不可重复的列表数据,并且提供了查询某个元素是否在set中的接口,可以方便计算两个set的交集、并集、差集等操作。
应用场景:需要存的数据不可重复且无序、需要获取多个数据源的交集 并集等。sismember sinterstore suion

sorted set:
结构:哈希表 + 跳表(用于有序链表的快速查找,给原始链表建立多层索引链表,类似有序数组的二分查找 跳表
和set相比,zset多了一个权重score,每一个元素都对应一个score,使用哈希表存储(key = 元素的value; value = score)。
根据score对列表元素进行排序,并且可以查找指定score范围的元素列表
zset适用于存储有序、不可重复的列表数据。 但是评分score可以重复。
应用场景:需要根据某个权重对元素进行排序的场景。比如排行榜。需要较多查找请求。
zscore key member 查看某个元素的分数
zrange key start stop 按照添加的索引查找列表
zrangebyscore key min max 按照分数正序查找列表
zrevrangebyscore key max min 按照分数逆序查找列表

bitmaps:
bitmaps本身是字符串,但是可以对字符串的二进制位进行操作。可以通过bitmap,仅使用一个bit位来表示某个元素的值或状态。节约空间且高效。
可以将bitmap看做二进制位的数组,其value只存储0和1,bitmap中的偏移量offset可以看做数组的下标。
应用场景:需要保存用户状态信息,并需要进一步对这些信息进行分析的场景。例如:用户签到情况、活跃情况、行为统计等。
setbit key offset value value默认是0
记录视频video007的点赞用户 setbit video007 userId 1
记录用户的在线状态 setbit online userId 1

# 对一个或多个 二进制位字符串 key 进行位元操作,并将结果保存到 destkey 上。
# BITOP 命令支持 AND 、 OR 、 NOT 、 XOR 这四种操作operation中的任意一种参数
BITOP operation destkey key [key ...]

比如需要获取多个bitmap的交集、并集等场景,例如统计某个时间段(每天都有一个bitmap统计用户在线状态)内每天都上线(取每天bitmap的交集)的用户。

为什么要用分布式缓存?
单机缓存的容量受服务器限制,并且单机缓存无法共享缓存数据,因此需要分布式缓存。
(本地缓存只在当前服务里有效,多个服务之间无法共享缓存数据。)

参考 javaguide-redis

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-03-13 21:52:47  更:2022-03-13 21:56:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:01:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码