Redis数据库

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

首先我们来看一下数据库在进行写操作时到底做了哪些事,主要有下面五个过程: 客户端向服务端发送写操作(数据在客户端的内存中)。数据库服务端接收到写请求的数据(数据在服务端的内存中)。服务端调用write这个系统调用,将数据往磁盘上写(数据在系统内存的缓冲区中)。操作系统将缓冲区中的数据转移到磁盘控制器上(数据在磁盘缓存中)。磁盘控制器将数据写到磁盘的物理介质中(数据真正落到磁盘上)。
Redis    特点、优势k、v键值存储以及数据结构存储(如列表、字典)所有数据(包括数据的存储)操作均在内存中完成单线程服务(这意味着会有较多的阻塞情况),采用epoll模型进行请求响应,对比nginx(高性能的HTTP和反向代理服务)支持主从复制模式,更提供高可用主从复制模式(哨兵)去中心化分布式集群丰富的编程接口支持,如Python、Golang、Java、php、Ruby、Lua、Node.js 功能丰富,除了支持多种数据结构之外,还支持事务、发布/订阅、消息队列等功能支持数据持久化(AOF、RDB)RDB持久化是把当前进程数据生成快照保存到硬盘的过程,触发RDB持久化过程分为手动触发和自动触发。AOF(append only file)持久化:以独立日志的方式记录每次写命令,重启时再重新执行AOF文件中命令达到恢复数据的目的。AOF的主要作用是解决了数据持久化的实时性,目前已经是Redis持久化的主流方式。
memcache特点:memcache是一个分布式的内存对象缓存系统,并不提供持久存储功能,而redis拥有持久化功能memcache数据存储基于LRU(简单说:最近、最少使用key会被剔除),而redis则可以永久保存(服务一直运行情况下)LRU:内存管理的一种页面置换算法,对于在内存中但又不用的数据块(内存块)叫做LRUmemcache是多线程的(这是memcache优势之一),也就意味着阻塞情况少,而redis是单线程的,阻塞情况相对较多Redis和memcache两者性能上相差不大memcache只支持简单的k、v数据存储,而redis支持多种数据格式存储。memcache是多线程、非阻塞IO复用网络模型,而redis是单线程IO复用模型
CAP原则(CAP定理)、BASE理论CAP原则又称CAP定理,指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼。CAP原则是NOSQL数据库的基石。Consistency(一致性)。 Availability(可用性)。Partition tolerance(分区容错性)。分布式系统的CAP理论:理论首先把分布式系统中的三个特性进行了如下归纳:一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)可用性(A):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新具备高可用性)分区容忍性(P):以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。NoSQL系统通常注重性能和扩展性,而非事务机制(事务就是强一致性的体现)。redis就是注重在性能上
RDB优势一旦采用该方式,那么你的整个Redis数据库将只包含一个文件,这样非常方便进行备份。比如你可能打算没1天归档一些数据。方便备份,我们可以很容易的将一个一个RDB文件移动到其他的存储介质上RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快。RDB 可以最大化 Redis 的性能:父进程在保存 RDB 文件时唯一要做的就是 fork 出一个子进程,然后这个子进程就会处理接下来的所有保存工作,父进程无须执行任何磁盘 I/O 操作。劣势如果你需要尽量避免在服务器故障时丢失数据,那么 RDB 不适合你。 虽然 Redis 允许你设置不同的保存点(save point)来控制保存 RDB 文件的频率, 但是, 因为RDB 文件需要保存整个数据集的状态, 所以它并不是一个轻松的操作。 因此你可能会至少 5 分钟才保存一次 RDB 文件。 在这种情况下, 一旦发生故障停机, 你就可能会丢失好几分钟的数据。每次保存 RDB 的时候,Redis 都要 fork() 出一个子进程,并由子进程来进行实际的持久化工作。 在数据集比较庞大时, fork() 可能会非常耗时,造成服务器在某某毫秒内停止处理客户端; 如果数据集非常巨大,并且 CPU 时间非常紧张的话,那么这种停止时间甚至可能会长达整整一秒。 虽然 AOF 重写也需要进行 fork() ,但无论 AOF 重写的执行间隔有多长,数据的耐久性都不会有任何损失。AOF优势使用 AOF 持久化会让 Redis 变得非常耐久(much more durable):你可以设置不同的 fsync 策略,比如无 fsync ,每秒钟一次 fsync ,或者每次执行写入命令时 fsync 。 AOF 的默认策略为每秒钟 fsync 一次,在这种配置下,Redis 仍然可以保持良好的性能,并且就算发生故障停机,也最多只会丢失一秒钟的数据( fsync 会在后台线程执行,所以主线程可以继续努力地处理命令请求)。                            AOF 文件是一个只进行追加操作的日志文件(append only log), 因此对 AOF 文件的写入不需要进行 seek , 即使日志因为某些原因而包含了未写入完整的命令(比如写入时磁盘已满,写入中途停机,等等), redis-check-aof 工具也可以轻易地修复这种问题。Redis 可以在 AOF 文件体积变得过大时,自动地在后台对 AOF 进行重写: 重写后的新 AOF 文件包含了恢复当前数据集所需的最小命令集合。 整个重写操作是绝对安全的,因为 Redis 在创建新 AOF 文件的过程中,会继续将命令追加到现有的 AOF 文件里面,即使重写过程中发生停机,现有的 AOF 文件也不会丢失。 而一旦新 AOF 文件创建完毕,Redis 就会从旧 AOF 文件切换到新 AOF 文件,并开始对新 AOF 文件进行追加操作。                           AOF 文件有序地保存了对数据库执行的所有写入操作, 这些写入操作以 Redis 协议的格式保存, 因此 AOF 文件的内容非常容易被人读懂, 对文件进行分析(parse)也很轻松。 导出(export) AOF 文件也非常简单: 举个例子, 如果你不小心执行了 FLUSHALL 命令, 但只要 AOF 文件未被重写, 那么只要停止服务器, 移除 AOF 文件末尾的 FLUSHALL 命令, 并重启 Redis , 就可以将数据集恢复到 FLUSHALL 执行之前的状态。            劣势对于相同的数据集来说,AOF 文件的体积通常要大于 RDB 文件的体积。   根据所使用的 fsync 策略,AOF 的速度可能会慢于 RDB 。 在一般情况下, 每秒 fsync 的性能依然非常高, 而关闭 fsync 可以让 AOF 的速度和 RDB 一样快, 即使在高负荷之下也是如此。 不过在处理巨大的写入载入时,RDB 可以提供更有保证的最大延迟时间(latency)。AOF 在过去曾经发生过这样的 bug : 因为个别命令的原因,导致 AOF 文件在重新载入时,无法将数据集恢复成保存时的原样。 (举个例子,阻塞命令 BRPOPLPUSH 就曾经引起过这样的 bug 。) 测试套件里为这种情况添加了测试: 它们会自动生成随机的、复杂的数据集, 并通过重新载入这些数据来确保一切正常。 虽然这种 bug 在 AOF 文件中并不常见, 但是对比来说, RDB 几乎是不可能出现这种 bug 的。

linux和windows安装

1. linux中安装

yum install gcc -y  #安装C依赖
wget http://download.redis.io/redis-stable.tar.gz  #下载稳定版本
tar zxvf redis-stable.tar.gz  #解压
cd redis-stable
make install     #或者指定路径    make PREFIX=/opt/app/redis install   #指定目录编译,也可以不用指定------------手动进行其他配置
mkdir /etc/redis   #建立配置目录
cp redis.conf /etc/redis/6379.conf # 拷贝配置文件
cp utils/redis_init_script /etc/init.d/redis  #拷贝init启动脚本针对6.X系统
chmod a+x  /etc/init.d/redis  #添加执行权限
vi /etc/redis/6379.conf #修改配置文件:
bind 0.0.0.0      #监听地址
maxmemory 4294967296   #限制最大内存(4G):
daemonize yes   #后台运行####启动与停止
/etc/init.d/redis start
/etc/init.d/redis stop
redis的使用1. 启动redis服务器编译安装找到项目目录的src文件夹./redis-server包管理器在任意的地方输入redis-serverredis默认端口63792. 链接redis1. 工具redis-cli2. 命令redis-cliredis-cli -h 127.0.0.1 -p6379  -a xxxx-h ip地址-p port 端口默认端口 6379-a 密码

2.windows中安装

windows版本的在github上手动下载,解压
https://github.com/MicrosoftArchive/redis/releases

下载解压后

redis-server.exe和redis-cli.exe两个文件启动即可

redis命令大全

官网:http://redisdoc.com/

redis缓存设置

官方文档:http://chibisov.github.io/drf-extensions/docs/#cacheresponsemixin

1.配置setting

#链接redis
#"LOCATION": "redis://127.0.0.1:6379/1",后面的1为使用redis使用的库,默认有十六个库(0-15)
CACHES = {"default": {"BACKEND": "django_redis.cache.RedisCache","LOCATION": "redis://127.0.0.1:6379/1",         "OPTIONS": {"CLIENT_CLASS": "django_redis.client.DefaultClient",}}
}#设置缓存失效时间,到点了就重新请求,保证数据实时更新性。
REST_FRAMEWORK_EXTENSIONS = {'DEFAULT_CACHE_RESPONSE_TIMEOUT': 60
}

2.模块应用

#views中from rest_framework_extensions.cache.mixins import CacheResponseMixin   #导入CacheResponseMixin库,安装库pip3 install drf-extensionsclass MovieInfoViewSet(CacheResponseMixin,ReadOnlyModelViewSet):      #CacheResponseMixin必须为第一个"""#ReadOnlyModelViewSet里面包含了list,destroy,createlist:这个接口是获取多条用户信息的destroy:这个接口是删除用户的,请慎重使用create:这个接口是创建用户的"""queryset = User.objects.all()#serializer的作用是把object转换成json,object直接转json换转不了,#因为object 里面有functionserializer_class = UserSerializer

#Redis数据库-思维导图相关推荐

  1. Oracle数据库思维导图

    数据库思维导图 因为图片过大CSDN中无法导入,所以分支详细思维导图在网盘中,下附网盘链接 链接:https://pan.baidu.com/s/1vqeAP_xJhL27fMHsdZACvQ 提取码 ...

  2. Redis基础(思维导图)附Redis工具类

    Redis 1.什么是Redis NoSql数据库 分布式缓存中间件 key-value存储 提供海量数据存储访问 数据存储在内存里,读取更快 2.缓存方案对比 缓存方案 优点 缺点 Ehcache ...

  3. mysql数据库思维导图

    先前总结的一下数据库的思维导图,和大家分享一下,持续更新: 最近面试数据仓库工程师,过程中,问到索引类型,只是记得,普通索引,唯一索引,还有主键,面试中让说其中不同,但是只是记得,唯一索引,允许为空, ...

  4. Java中的Redis的思维导图_Redis思维导图

    常见相关问题 Redis 有哪些功能?数据缓存功能 分布式锁的功能 支持数据持久化 支持事务 支持消息队列 Redis 为什么是单线程的? 因为 cpu 不是 Redis 的瓶颈,Redis 的瓶颈最 ...

  5. 【Redis | 黑马点评 + 思维导图】分布式锁

    文章目录 分布式锁的基本原理和实现方式对比 Redis分布式锁的实现核心思路 分布式锁的初级实现 Redis分布式锁误删情况说明 解决Redis分布式锁误删问题 分布式锁的原子性问题 Lua脚本解决多 ...

  6. 面试还搞不懂redis,快看看这40道面试题(含答案和思维导图)

    Redis 面试题 1.什么是 Redis?. 2.Redis 的数据类型? 3.使用 Redis 有哪些好处? 4.Redis 相比 Memcached 有哪些优势? 5.Memcache 与 Re ...

  7. 敖丙思维导图-Redis

    敖丙思维导图系列目录 这些知识整理都是自己查阅帅丙资料(本文还参考了<Redis深度历险:核心原理和应用实践>这本书)加以总结滴~ 每周都会更新知识进去. 如有不全或错误还请大家在评论中指 ...

  8. 敖丙思维导图-Mysql数据库

    敖丙思维导图系列目录 这些知识整理都是自己查阅帅丙资料加以总结滴~ 每周都会更新知识进去. 如有不全或错误还请大家在评论中指出~ 敖丙思维导图-集合 敖丙思维导图-多线程之synchronized\T ...

  9. Redis思维导图分享(包含详细知识点)

    思维导图地址: Redis思维导图,点击跳转 思维导图内容 Redis Redis基础 Redis基本命令 遍历键 keys:全量遍历键,用来列出所有满足特定正则字符串规则的key,当redis数据量 ...

  10. 思维导图五(Linux、JVM、Redis、RabbitMQ、ElasticSearch)

    本文是自己学习相关知识点时做的思维导图,主要为了帮助自己巩固知识点 其他框架思维导图: 思维导图一(HTML5.CSS3.JavaScript.Json.Ajax.Vue)_SKS121的博客-CSD ...

最新文章

  1. 机器学习中的目标函数、损失函数、代价函数有什么区别?
  2. 算法导论第十二章:二叉查找树
  3. 数控程序中r及q代表什么_邹军:如何利用数学公式编写cnc程序?
  4. java分页查询oracle_Java中实现Oracle分页查询
  5. 支持linux系统摄像头模块,在Linux操作系统上使用摄像头
  6. css3点击会移动到点,CSS3过渡点击事件
  7. leetcode511. 游戏玩法分析 I(SQL)
  8. jq之animate() toggle
  9. 小汤学编程之jQuery学习day03——事件、效果、插件
  10. iOS推送(利用极光推送)
  11. linux中自动化日志分析,Shell项目案例7-应用日志分析
  12. chmod命令用法_Java开发人员必须掌握的Linux命令(一)
  13. java试题库管理系统源代码_题库聚合源码_有没有人有试题库管理系统的源代码啊基于java web的_淘题吧...
  14. 各种模拟器端口号及模拟器连接方式
  15. tiobe编程语言排名_排名前20位的编程语言:GitHut和Tiobe排名
  16. java中的迭代是什么意思_JAVA里的 迭代 具体是指什么意思
  17. 2.5 Web前端:JavaScript5:常用DOM操作
  18. golang加载双向认证加密的证书key文件
  19. PP-ShiTu: A Practical Lightweight Image Recognition System
  20. 纯干货,面试题分享,让你打有准备的战!

热门文章

  1. 动态表情包制作?gif动态图怎么制作?
  2. matlab ttest空值,用MATLAB做T检验(ttest)
  3. word中标题去掉前面的点
  4. 反向题在测试问卷信效度_问卷信度效度检验
  5. 微信图片怎么添加竖排文字_微信拍照的照片怎样加文字?
  6. android启用hdcp_如何在Android Auto上启用开发人员设置
  7. python给excel排序_数据处理,Excel的排序功能,使用pandas在Python中轻松完成
  8. Java 获取PDF数字签名证书信息
  9. 求解一元二次方程的解 (分支语句)
  10. 坐标系的旋转与欧拉角