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是一个开源免费的,遵守BSD协议,是一个高性能的KV数据库
?? ??? ?内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。
?? ??? ?非关型数据库

????????Redis 内置了复制(replication),LUA脚本(Lua scripting),LRU驱动事件 (LRU eviction),事务(transactions)和不同级别的 磁盘持久化(persistence), 并通过Redis哨兵(Sentinel) 和自动分区(Cluster)提供高可用性(high availability)


?? ?支持5种数据类型
?? ??? ?string(字符串)
?? ??? ??? ?set:添加一条String数据
?? ??? ??? ?get:获取一条String数据
?? ??? ??? ?mset:添加多条String数据
?? ??? ??? ?mget:获取多条String数据
?? ??? ?hash(哈希)
?? ??? ??? ?hset :添加一条hash类型数据
?? ??? ??? ?hget :获取一条hash类型数据
?? ??? ??? ?hmset :添加多条hash类型数据
?? ??? ??? ?hmget :获取多条hash类型数据
?? ??? ??? ?hgetAll :获取指定所有hash类型数据
?? ??? ??? ?hdel :删除指定hash类型数据(一条或多条)
?? ??? ?list(列表)
?? ??? ??? ?lpush :左添加(头)list类型数据
?? ??? ??? ?rpush :右添加(尾)类型数据
?? ??? ??? ?lrange : 获取list类型数据start起始下标 end结束下标 包含关系
?? ??? ??? ?llen :获取条数
?? ??? ??? ?lrem :删除列表中几个指定list类型数据
?? ??? ?set集合
?? ??? ??? ?sadd:添加set类型数据
?? ??? ??? ?smembers :获取set类型数据
?? ??? ??? ?scard :获取条数
?? ??? ??? ?srem :删除数据
?? ??? ?sorted set(有序集合)
?? ??? ??? ?sorted set是通过分数值来进行排序的,分数值越大,越靠后。
?? ??? ??? ?zadd :添加sorted set类型数据
?? ??? ??? ??? ?zadd需要将Float或者Double类型分数值参数,放置在值参数之前
?? ??? ??? ?zrange :获取sorted set类型数据
?? ??? ??? ?zcard :获取条数
?? ??? ??? ?zrem :删除数据

关系型数据库
?? ?优点
?? ??? ?容易理解
?? ??? ?使用方便,通用的sql语言
?? ??? ?易于维护,丰富的完整性
?? ?缺点
?? ??? ?磁盘I/O是并发的瓶颈
?? ??? ?海量数据查询效率低
?? ??? ?横向扩展困难
?? ??? ?多表的关联查询以及复杂的数据分析类型的复杂sql查询

非关系型数据库

????????优点

????????????????根据需要添加字段,不需要多表联查。仅需id取出对应的value

????????????????适用于SNS(社会化网络服务软件。比如facebook,微博)

????????????????严格上讲不是一种数据库,而是一种数据结构化存储方法的集合

缺点:

????????只适合存储一些较为简单的数据

????????不合适复杂查询的数据

????????不合适持久存储海量数据

比较

?

安装

1.下载redis

2.上传到服务器

3.解压

????????tar zxvf redis-5.0.3.tar.gz

4.安装依赖

????????yum -y install gcc-c++ autoconf automake

5.预编译

????????cd redis-5.0.3/

????????make

6.安装

????????指定安装目录

????????????????make PREFIX=/usr/local/redis/ install

安装成功

?7.启动

??????? cd /usr/local/redis/bin

????????./redis-server

默认为前台启动,修改为后台启动

????????cp redis.conf /usr/local/redis/bin/

启动时,指定配置文件路径

??????? ./redis-server ./redis.conf

?

8.修改配置文件

??????? vi redis.conf

????????1.注释掉 bind 127.0.0.1

????????2.关闭保护模式,修改为no

??????? 3.添加访问认证

?

9.修改后kill -9 XXXX杀死redis进程,重启redis

??????? ps -ef | grep redis

??????? kill -9 5699

???????? ./redis-server ./redis.conf

?


?? ?使用redis好处
?? ??? ?1.速度快,因为数据存在内存中,类似于hashmap
?? ??? ?2.支持丰富数据类型
?? ??? ?3.支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
?? ??? ?4。丰富的特征:可用于缓存,消息,按key设置过期时间,过期后会自动删除


?? ?redis持久化机制
?? ??? ?RDB(快照)
?? ??? ??? ?是指用数据集快照的方式半持久化模式)记录 redis 数据库的所有键值对,在某个时间点将数据写入一个临时文件,持久化结束后,用这个临时文件替换上次持久化的文件,达到数据恢复
?? ??? ??? ?优点
?? ??? ??? ??? ?1.只有一个文件dump.rdb,方便持久化
?? ??? ??? ??? ?2.容灾性好,一个文件可以保存到安全的磁盘
?? ??? ??? ??? ?3.性能最大化,fork子进程来完成写操作,让主进程继续处理命令,所以是IO最大化
?? ??? ??? ?缺点
?? ??? ??? ??? ?数据安全性底
?? ??? ??? ??? ??? ?RDB 是间隔一段时间进行持久化,如果持久化之间 redis 发生故障,会发生数据丢失。所以这种方式更适合数据要求不严谨的时候


?? ??? ?AOP(日志)
?? ??? ??? ?是指所有的命令行记录以 redis 命令请求协议的格式完全持久化存储)保存为 aof 文件。
?? ??? ??? ?优点
?? ??? ??? ??? ?数据安全,aof 持久化可以配置 appendfsync 属性,有 always,每进行一次命令操作就记录到 aof 文件中一次。
?? ??? ??? ??? ?通过 append 模式写文件,即使中途服务器宕机,可以通过 redis-check-aof工具解决数据一致性问题。
?? ??? ??? ??? ?AOF 机制的 rewrite 模式。AOF 文件没被 rewrite 之前(文件过大时会对命令进行合并重写),可以删除其中的某些命令(比如误操作的 flushall))
?? ??? ??? ?缺点
?? ??? ??? ??? ?1.AOP文件比RDB文件大,且恢复速度慢
?? ??? ??? ??? ?2.数据集大的时候,比RDB启动效率底


?? ?怎么理解 Redis 事务?
?? ??? ?(1)事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
?? ??? ?(2)事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。

主备切换多节点

修改哨兵配置sentinel.conf

哨兵监听的主节点IP地址

?设置访问权限主节点认证码

?日志文件生成的路径和名称

?后台运行

?

?

Lettuce和Jedis的区别

Jedis 是一个优秀的基于 Java 语言的 Redis 客户端,但是,其不足也很明显: Jedis 在实现上是直接连接 Redis-Server,在多个线程间共享一个 Jedis 实例时是 线程不安全的,如果想要在多线程场景下使用 Jedis ,需要使用连接池,每个线程 都使用自己的 Jedis 实例,当连接数量增多时,会消耗较多的物理资源。

Lettuce 则完全克服了其线程不安全的缺点: Lettuce 是基于 Netty 的连接 (StatefulRedisConnection), Lettuce 是一个可伸缩的线程安全的 Redis 客户端,支持同步、异步和响应式模 式。多个线程可以共享一个连接实例,而不必担心多线程并发问题。它基于优秀 Netty NIO 框架构建,支持 Redis 的高级功能,如 Sentinel,集群,流水线,自动重新 连接和 Redis 数据模型。

自定义模板解决序列化问题

@Configuration

public class RedisConfig {

//方法名称必须是redisTemplate,相当于覆盖自动化配置中的序列化模式

@Bean

public RedisTemplate redisTemplate(LettuceConnectionFactory redisConnectionFactory){ RedisTemplate redisTemplate = new RedisTemplate<>();

//为string类型key设置序列器

redisTemplate.setKeySerializer(new StringRedisSerializer());

//为string类型value设置序列器

redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());

//为hash类型key设置序列器

redisTemplate.setHashKeySerializer(new StringRedisSerializer());

//为hash类型value设置序列器

redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer()); redisTemplate.setConnectionFactory(redisConnectionFactory); return redisTemplate; } }


?? ?Key的过期淘汰机制
?? ??? ?1.定期删除
?? ??? ?2.惰性删除
?? ??? ?3.内存淘汰机制
?? ??? ??? ?内存快要满了的时候,对一下快要过期的数据提前进行删除


?? ?缓存击穿
?? ??? ?有人拿抢扫射,但是被扫的人穿了防弹衣,但是防弹衣有一个洞,那个人就一直往洞里扫
?? ??? ?缓存击穿是一个热点的Key,有大并发集中对其进行访问,突然间这个Key失效了,导致大并发全部打在数据库上,导致数据库压力剧增。. 这种现象就叫做缓存击穿
?? ??? ?高并发的情况下,某个热门key突然过期,导致大量请求在Redis未找到缓
?? ??? ?存数据,进而全部去访问DB请求数据,引起DB压力瞬间增大
?? ??? ?解决方案
?? ??? ??? ?1.redis中的数据不设置过期时间
?? ??? ??? ??? ?可以把不存在的key也设置缓存,并设置过期时间
?? ??? ??? ?2.加一个互斥锁


?? ?缓存穿透
?? ??? ?查询缓存和DB中都不存在的数据
?? ??? ?我们使用Redis大部分情况都是通过Key查询对应的值,假如发送的请求传进来的key是不存在Redis中的,那么就查不到缓存,查不到缓存就会去数据库查询。假如有大量这样的请求,这些请求像“穿透”了缓存一样直接打在数据库上,这种现象就叫做缓存穿透。
?? ??? ?解决方案
?? ??? ??? ?1.互斥锁
?? ??? ??? ?2.异步更新
?? ??? ??? ?3.提供一个能迅速判断请求是否有效的拦截机制


?? ?缓存雪崩
?? ??? ?当某一个时刻出现大规模的缓存失效的情况,那么就会导致大量的请求直接打在数据库上面,导致数据库压力巨大,如果在高并发的情况下,可能瞬间就会导致数据库宕机。这时候如果运维马上又重启数据库,马上又会有新的流量把数据库打死
?? ??? ?解决方案
?? ??? ??? ?1.在原有的失效时间上加上一个随机值
?? ??? ??? ??? ?这样就避免了艺文采用相同的过期时间导致雪崩
?? ??? ??? ?2.使用熔断机制
?? ??? ??? ?3.提高数据库的容灾能力,可以使用分库分表,读写分离的车略
?? ??? ??? ?4.为了防止Redis宕机导致缓存雪崩的问题,可以搭建Redis集群,提高Redis的容灾性。
?? ??? ??? ?5.双缓存
?? ??? ??? ?6.互斥锁
?? ??? ??? ?7.设置热点数据永不过期

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-09-10 23:59:23  更:2021-09-10 23:59:58 
 
开发: 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/23 20:18:13-

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