Redis-概述
Redis支持的类型:
String,List,Map,Set,Sorted set
Redis的持久化:
1、Redis DataBase (RDB): RDB是在某个时间点将数据写入一个临时文件,持久化结束后,用这个临时文件替换上次持久化的文件,达到数据恢复。
优点:使用单独子进程来进行持久化,主进程不会进行任何IO操作,保证了redis的高性能
缺点:RDB是间隔一段时间进行持久化,如果持久化之间redis发生故障,会发生数据丢失。所以这种方式更适合数据要求不严谨的时候
2、Append Only File (AOF): 将“操作 + 数据”以格式化指令的方式追加到操作日志文件的尾部,在append操作返回后(已经写入到文件或者即将写入),才进行实际的数据变更,“日志文件”保存了历史所有的操作过程;当server需要数据恢复时,可以直接replay此日志文件,即可还原所有的操作过程。AOF相对可靠,它和mysql中bin.log、apache.log、zookeeper中txn-log简直异曲同工。AOF文件内容是字符串,非常容易阅读和解析。
优点:可以保持更高的数据完整性,如果设置追加file的时间是1s,如果redis发生故障,最多会丢失1s的数据;且如果日志写入不完整支持redis-check-aof来进行日志修复;AOF文件没被rewrite之前(文件过大时会对命令进行合并重写),可以删除其中的某些命令(比如误操作的flushall)。
缺点:AOF文件比RDB文件大,且恢复速度慢。
Redis主从面临的问题:
1、主从机制,可以提供读写分离,分担读的请求压力。但是主只有一个,存在单点故障的问题。
哨兵机制面临的问题:
1、解决了主从的单点问题,但是主服务器只有一个,写性能不足。
Redis集群:终极解决方案 ,解决了主从机制的单点问题,和哨兵机制的主服务器唯一,写性能问题。
Redis为什么这么快:
1、 纯内存操作。
2、单线程,避免线程切换的开销。
3、使用I/O多路复用机制。
缓存面临的问题:
1、缓存雪崩
问题描述:缓存同一时间大面积失效,当请求到达的时候,导致所有的请求都怼到数据库上,导致数据库链接异常。
解决方案: a、缓存预热的时候,设置随机过期时间。
b、利用互斥锁,缓存失效的时候,先获取互斥锁,得到锁再去操作数据库,否则休眠等待锁。(缺点:吞吐量下降)
2、缓存击穿
问题描述:黑客故意去请求缓存中不存在的数据,导致所有的请求都怼到数据库上,从而数据库连接异常。
解决方案: a、利用互斥锁,缓存失效的时候,先获取互斥锁,得到锁再去操作数据库,否则休眠等待锁。
b、黑名单机制,禁止黑名单中的ip地址访问。
3、缓存与数据库双写一致性问题
问题描述:请求A为读请求,请求B为修改请求,它们请求的为同一个东西。请求B先到达,修改数据库数据成功,未来得及更新缓存。此时请求A到达,获取缓存中的脏数据。
解决方案:先删除缓存,再更新数据库,最后再更新缓存。
4、缓存的并发竞争问题。
问题描述:同时有多个子系统去设置同一个key。
解决方案: a、分布式锁,得到锁才进行操作,其它线程等待。
b、使用队列,将set操作,变成串行访问。
Redis 采用的是定期删除+惰性删除策略、内存淘汰策略
1、定期删除:固定时间内,随机抽取Redis内的数据,进行过期检查。
2、惰性删除:当获取该key的时候,再判断是否过期。
3、内存淘汰策略:在 redis.conf 中有一行配置:maxmemory-policy volatile-lru 就是配置内存淘汰的策略,用以补充定期删除+惰性删除的不足。
allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的 Key。推荐使用。(其余的分别是:noeviction、allkeys-random、volatile-lru、volatile-random、volatile-ttl)
Redis-概述的更多相关文章
- redis 概述、windows版本下载启动访问退出安装、中文乱码、RedisDesktopManager下载
redis 概述 redis的key是string类型的:value有多种类型,但放入的不是特定类型数据,添加的都是string,只是redis把这些值组织成了各种数据结构.key和相应的值都是str ...
- Redis概述以及Linux安装
Redis 概述 Redis是什么 Redis,Remote Dictionary Server,远程字典服务.是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.key-v ...
- [Redis]Redis 概述及基本使用规范.
1 nosql的简介 1.1 nosql简介 随着互联网Web2.0网站的兴起,传统的关系数据库在应付Web2.0网站,特别是超大规模和高并发的SNS类型的Web2.0纯动态网站已经显得力不从心,暴露 ...
- Redis概述与基本操作
redis教程 概述 redis是一种nosql数据库,他的数据是保存在内存中,同时redis可以定时把内存数据同步到磁盘,即可以将数据持久化,并且他比memcached支持更多的数据结构(strin ...
- redis 概述及部署 安装php和python客户端
概述 Redis是一个基于key-value键值对的持久化数据库存储系统.redis支持的数据存储类型比memcached更丰富,包括strings(字符串),lists(列表),sets(集合)和s ...
- 跟我一起学Redis之Redis概述
背景 技术的更新迭代,是程序员最最最头大的事,总是在每个网络角落中有感慨声:学不动啦: 其实新技术并不是凭空而出,而是随着业务推进.数据驱动.技术积累促使开发者的不断探索和实践,最终横空出世--&qu ...
- Redis学习(1)---Redis概述
什么是NoSQL 概述 NoSQL:Not Only SQL,意思不仅仅是SQL,它是属于非关系型数据库.那什么是关系型数据库?数据结构是一种有行有列的数据库. NoSQL数据库是为了解决高并发.高可 ...
- Redis概述
1. Redis是使用内存存储(in-momory)的非关系型数据. 2. Redis的数据存储选项共有5种:字符串.列表.集合.散列表.有序集合. 3. Redi ...
- redis学习(2)--- Redis概述
一.Redis介绍 高性能键值对数据库,支持的键值对数据类型: 字符串类型 列表类型 有序集合类型 散列类型 集合类型 官方测试读写速度: 测试50个并发程序,执行10万次请求 读的速度:每秒11万次 ...
- redis概述(一)
什么是NoSql? 为了解决高并发.高可用.高可扩展,大数据存储等一系列问题而产生的数据库解决方案,就是NoSql. NoSql,叫非关系型数据库,它的全名Not only sql.它不能替代关系型数 ...
随机推荐
- 注解中用于@target的方法annotation/--ElementType.METHOD,ElementType.TYPE对应方法,类接
@Target: @Target说明了Annotation所修饰的对象范围:Annotation可被用于 packages.types(类.接口.枚举.Annotation类型).类型成员(方法.构造 ...
- 学习react教程
网址收藏: React官网,React的Github,React的中文文档 1.react是什么? React起源于Facebook的内部项目,因为该公司对市场上所有的Javascript MVC框架 ...
- Cause: org.jetbrains.plugins.gradle.tooling.util.ModuleComponentIdentifierIm Lorg/gradle/api/artifacts/ModuleIdentifier;
今天碰到一个问题, 正常的下载gradle到本地,然后到spring官网上通过他们提供的start.spring.io创建一个demo项目, 然后在idea中打开,并配置下载的gradle到idea中 ...
- 判断IE浏览器的版本号
function IEVersion() { var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串 var isIE = userAgen ...
- [JZOJ6088] [BZOJ5376] [loj #2463]【2018集训队互测Day 1】完美的旅行【线性递推】【多项式】【FWT】
Description Solution 我们考虑将问题一步步拆解 第一步求出\(F_{S,i}\)表示一次旅行按位与的值为S,走了i步的方案数. 第二步答案是\(F_{S,i}\)的二维重复卷积,记 ...
- MySQL 创建schema
create schema zzz default character set utf8 collate utf8_general_ci;--创建数据库 grant select,insert,upd ...
- c# 获取项目根目录方法
编写程序的时候,经常需要用的项目根目录.自己总结如下 1.取得控制台应用程序的根目录方法 方法1.Environment.CurrentDirectory 取得或设置当前工作目录的完整限定路径 ...
- python描述符学习
目录 一.对象属性的访问控制 二.描述符基本理解 三.基本使用 四.使用描述符完成property.classmethod.staticmethod自定义实现 1.property的自定义实现 2.c ...
- MySQL3534
1.mysqld install 2.mysqld --initialize-insecure自动生成无密码的root用户 3.mysql -uroot即可登录
- Normalize.css – HTML5-ready 的css重置样式集
Normalize.css 是一个可定制的 css文件,使浏览器呈现的所有元素,更一致和符合现代标准.它正是针对只需要统一的元素样式.该项目依赖于研究浏览器默认元素风格之间的差异,精确定位需要重置的样 ...