redis学习小结一

Redis知识点小结一

概念:

  • 内存数据库,用于做缓存。可做分布式锁,提供多种数据类型支持不同业务场景。支持事务、持久化、LUA脚本、LRU驱动事件。

高性能和高并发

  • 高性能:第一次访问数据库中的数据会比较慢,因为是从磁盘上读取。将用户第一次访问的数据放入缓存,第二次或以后的多次访问直接查缓存,没有再去磁盘,提高查询效率,缩短查询时间。如果数据库中的数据改变,那么就同步改变缓存中的数据。
  • 高并发:直接操作缓存能够承受的请求远远超过直接访问数据的请求。可以考虑将部分数据库中的数据移到缓存中,从而实现一部分请求不经过数据库,而直接进入缓存。

为什么不用map做缓存却用redis呢

  • 缓存分为两种:分布式缓存和本地缓存,redis是分布式缓存,map是本地缓存。
  • 本次缓存容量小,有上限。分布式缓存容量大。
  • map缓存不具有一致性,redis缓存具有一致性。

redis的优点

  • 支持多种数据类型(list set zset hash等等)而传统memcache仅支持String类型
  • redis支持数据持久化,可以将内存中的数据保存在磁盘中。重启redis可直接使用。
  • redis使用单线程的多路IO复用模型,数据安全。

redis常用数据结构及使用场景

  • String:String数据结构为简单的Key-Value类型,value不仅可以是字符串,也可以是数字。

    • 使用场景:统计数量,粉丝数量,用户数量。
  • List:支持反向查找和遍历,但有额外开销。可实现分页查询。
    • 使用场景:分页查询
  • Set:相比较List,Set中不允许存储重复的元素。
    • 使用场景:统计共同关注好友等

redis过期时间

  • Redis有设置过期的功能,就是对存储在redis缓存中的数据设置有效时间。短信验证码或者邮箱验证码是一个很好的实例。

redis的删除策略

  • 定期删除:默认每隔100ms随机抽取那些设置过期数据的key,检查是否过期,过去就删除,是随机抽取的。
  • 惰性删除: 定期删除可能导致许多过期的key过了有效时间却没有被删除,当过期key没有靠定期删除机制删除时,就停留在内存中,除非系统去查看那些key,才会被redis删除。这就是惰性删除。
  • 解决策略:仅仅通过设置过期时间还不够,还需要内存淘汰策略。关于内存淘汰机制,请继续往下看。

redis内存淘汰机制

  1. volatile-ru:从已设置过期时间的数据集(server.db[i].expires)中挑选出最近最少使用的数据,然后淘汰。
  2. volatile-til:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据,然后淘汰。
  3. volatile-random:从已设置过期时间的数据(server.db[i].expires)中选择任意数据,然后淘汰。
  4. allkeys-lru:当内存不足以容纳新的写入数据操作时,在键空间中,移除最近最少使用的key(常用
  5. alleys-random:从数据集(server.db[i].dict)中选择任意数据淘汰。
  6. no-eviction:禁止驱逐数据。就是不允许删除数据,没人使用这个。

redis持久化机制

  • 为什么要有持久化机制?

    • 多数是为了“数据重用”,比如我们重启机制、机制故障之后进行恢复数据。
  • RDB持久化

    • 人送外号“快照”,是redis默认的持久化机制。默认每隔五分钟创建一个快照副本,特点是占用空间大,会丢失五分钟之内的数据,适合做备份,在恢复时可以恢复任意时间点上的数据。在redis.conf配置文件中默认有以下配置。
save 900 1 900秒后,至少有1个key发生变化,redis自动触发BGSAVE命令
save 300 10 300秒后,至少有10个key发生变化,redis自动触发BGSAVE命令
save  60 10000 60秒后,至少有10000个key发生变化,redis自动触发BGSAVE命令
  • AOF持久化

    • AOF相比较RDB,AOF的实时性更好,redis默认情况下没有开启AOF(append only file)方式的持久化,可以通过设置appendonly参数开启:appendonly:yes
    • AOF开启后,每执行一条更改操作,redis就会将该命令写入磁盘中的AOF文件。
    • 在redis的配置文件中存在三种不同的AOF持久化方式:
      • appendfsync always # 每次有数据修改时会写入AOF文件,会降低redis的速度
      • appendfsync everysec # 每秒钟同步一次,显式地将多个写命令同步到磁盘。
      • appendfsync no # 让操作系统决定何时进行同步操作
    • 为了兼顾数据存储和写入性能,用户可以考虑appendfsync everysec一项,让redis每秒同步一次,这样用户最多丢失1秒的数据,当磁盘IO繁忙时,redis会放慢自己的速度以使用磁盘的最大写入速度。

    小结二改日更新。。。

原文地址:https://www.cnblogs.com/bytAya/p/11172216.html

时间: 2024-10-10 17:03:13

redis学习小结一的相关文章

Redis学习小结

大数据时代要求: 三V:Volume海量.Velocity实时.Variety多样: 三高:高并发.高可扩.高性能 高并发操作不建议使用关联查询,而使用冗余数据,分布式系统支持不了太多的并发. 横向 VS 纵向: 纵向有极限,好比一台服务器存储资源总是有限度的. 横向无极限,好比一群服务器集群形成一个庞大的网络,资源不足时只需要继续增加新的服务器即可. NoSQL是什么? Not Only SQL,不仅仅是SQL,泛指非关系型数据库,这种类型数据库存储不需要固定的关系模式,数据之间没有直接关系,

分布式缓存技术redis学习系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)

本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用(主从.事务与锁.持久化)> 本文我们继续学习redis的高级特性--集群.本文主要内容包括集群搭建.集群分区原理和集群操作的学习. Redis集群简介 Redis 集群是3.0之后才引入的,在3.0之前,使用哨兵(sentinel)机制(本文将不做介绍,大家可另行查阅)来监控各个节点之间的状态.Redi

Redis学习笔记

Redis学习笔记:Redis是什么?redis是开源BSD许可高级的key-vlue存储系统可以用来存储字符串哈希结构链表.结构.集合,因此常用来提供数据结构服务. redis和memcache相比的独特之处:1.redis可以用来做存储,而memcache是用来做缓存 这个特点主要因为其有"持久化"的功能.2.存储的数据有"结构",对于memcache来说,存储的数据只有1种类型"字符串"而 redis则可以存储字符串.链表.哈希机构.集合.

(转)redis 学习笔记(1)-编译、启动、停止

redis 学习笔记(1)-编译.启动.停止 一.下载.编译 redis是以源码方式发行的,先下载源码,然后在linux下编译 1.1 http://www.redis.io/download 先到这里下载Stable稳定版,目前最新版本是2.8.17 1.2 上传到linux,然后运行以下命令解压 tar xzf redis-2.8.17.tar.gz 1.3 编译 cd redis-2.8.17make 注:make命令需要linux上安装gcc,若机器上未安装gcc,redhat环境下,如

git学习小结

背景:最近因为工作原因,需要将以前的代码库由bitbucket重新布置在一台服务器上,所以就学习了下git,特此记录下 在167这台机器上搭建apache,用做git server,由于以前apache都已经搭好了,所以这里只配置git server 就可以了,此处贴出配置: 服务器搭好了,来到配置中的root目录,git clone https://[email protected]/XXXX 此时,库和服务器都搭好了,用于新库测试的机器也可以从git server上克隆库了,来,我们来试试从

网络编程学习小结

几种网络编程方式: ISAPI.CGI.WinInet.Winsock 它们之间的差别: 1)  ISAPI主要是开发基于浏览器client与server端程序.效率比CGI方式高,并且也扩展了CGI没有的一些功能.(基于TCP/IP模型中的应用层) 2)  CGI主要是开发基于浏览器client与server端程序.(基于TCP/IP模型中的应用层) 3)  WinInet主要是开发client程序.(基于TCP/IP模型中的应用层) 4)  Winsock主要是基于socket来开发clie

MogileFS学习小结

大纲: 一.关于MogileFS 二.常见分布式文件系统 三.MogileFS基本原理 四.MogileFS的实现 一.关于MogileFS 当下我们处在一个互联网飞速发展的信息社会,在海量并发连接的驱动下每天所产生的数据量必然以几何方式增长,随着信息连接方式日益多样化,数据存储的结构也随着发生了变化.在这样的压力下使得人们不得不重新审视大量数据的存储所带来的挑战,例如:数据采集.数据存储.数据搜索.数据共享.数据传输.数据分析.数据可视化等一系列问题. 传统存储在面对海量数据存储表现出的力不从

201671010130 2016-2017-2 《Java程序设计》第四周学习小结

第四周学习小结 本次实验巩固了上次实验分隔数并求和的题,目前这个题有两种做法,一种是不断对数10求余,余数保存在sum中,然后左移一位,直到余数为零.另一种就是将数字强制转换成一个字符串数组String s=String.valueOf(num),根据方法s.toCharArray()将字符分离出来,据"x"-"0"=x,unicode码值相减即可得x的值. 父类和子类能够看两个交集,super关键字是否能够看做一个子类和超类的接口呢? 在子类中可以增加域.增加方法

Redis学习笔记4-Redis配置具体解释

在Redis中直接启动redis-server服务时, 採用的是默认的配置文件.採用redis-server   xxx.conf 这种方式能够依照指定的配置文件来执行Redis服务. 依照本Redis学习笔记中Redis的依照方式依照后,Redis的配置文件是/etc/redis/6379.conf.以下是Redis2.8.9的配置文件各项的中文解释. #daemonize no 默认情况下, redis 不是在后台运行的.假设须要在后台运行,把该项的值更改为 yes daemonize ye