redis 使用场景

news/2023/10/4 1:03:46

1. 使用redis有哪些好处?

(1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)

(2) 支持丰富数据类型,支持string,list,set,sorted set,hash

(3) 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行

(4) 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除


2. redis相比memcached有哪些优势?

(1) memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型

(2) redis的速度比memcached快很多

(3) redis可以持久化其数据


3. redis常见性能问题和解决方案:

(1) Master最好不要做任何持久化工作,如RDB内存快照和AOF日志文件

(2) 如果数据比较重要,某个Slave开启AOF备份数据,策略设置为每秒同步一次

(3) 为了主从复制的速度和连接的稳定性,Master和Slave最好在同一个局域网内

(4) 尽量避免在压力很大的主库上增加从库

(5) 主从复制不要用图状结构,用单向链表结构更为稳定,即:Master <- Slave1 <- Slave2 <- Slave3…

这样的结构方便解决单点故障问题,实现Slave对Master的替换。如果Master挂了,可以立刻启用Slave1做Master,其他不变。



4. MySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据

 相关知识:redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。redis 提供 6种数据淘汰策略:

voltile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰

volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰

volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰

allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰

allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰

no-enviction(驱逐):禁止驱逐数据

 

5. Memcache与Redis的区别都有哪些?

1)、存储方式

Memecache把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小。

Redis有部份存在硬盘上,这样能保证数据的持久性。

2)、数据支持类型

Memcache对数据类型支持相对简单。

Redis有复杂的数据类型。

3)、使用底层模型不同

它们之间底层实现方式 以及与客户端之间通信的应用协议不一样。

Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。

4),value大小

redis最大可以达到1GB,而memcache只有1MB



6. Redis 常见的性能问题都有哪些?如何解决?

 

1).Master写内存快照,save命令调度rdbSave函数,会阻塞主线程的工作,当快照比较大时对性能影响是非常大的,会间断性暂停服务,所以Master最好不要写内存快照。

 

2).Master AOF持久化,如果不重写AOF文件,这个持久化方式对性能的影响是最小的,但是AOF文件会不断增大,AOF文件过大会影响Master重启的恢复速度。Master最好不要做任何持久化工作,包括内存快照和AOF日志文件,特别是不要启用内存快照做持久化,如果数据比较关键,某个Slave开启AOF备份数据,策略为每秒同步一次。

 

3).Master调用BGREWRITEAOF重写AOF文件,AOF在重写的时候会占大量的CPU和内存资源,导致服务load过高,出现短暂服务暂停现象。

4). Redis主从复制的性能问题,为了主从复制的速度和连接的稳定性,Slave和Master最好在同一个局域网内



7, redis 最适合的场景

Redis最适合所有数据in-momory的场景,虽然Redis也提供持久化功能,但实际更多的是一个disk-backed的功能,跟传统意义上的持久化有比较大的差别,那么可能大家就会有疑问,似乎Redis更像一个加强版的Memcached,那么何时使用Memcached,何时使用Redis呢?

       如果简单地比较Redis与Memcached的区别,大多数都会得到以下观点:

     1 、Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
     2 、Redis支持数据的备份,即master-slave模式的数据备份。
     3 、Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。

(1)、会话缓存(Session Cache)

最常用的一种使用Redis的情景是会话缓存(session cache)。用Redis缓存会话比其他存储(如Memcached)的优势在于:Redis提供持久化。当维护一个不是严格要求一致性的缓存时,如果用户的购物车信息全部丢失,大部分人都会不高兴的,现在,他们还会这样吗?

幸运的是,随着 Redis 这些年的改进,很容易找到怎么恰当的使用Redis来缓存会话的文档。甚至广为人知的商业平台Magento也提供Redis的插件。

(2)、全页缓存(FPC)

除基本的会话token之外,Redis还提供很简便的FPC平台。回到一致性问题,即使重启了Redis实例,因为有磁盘的持久化,用户也不会看到页面加载速度的下降,这是一个极大改进,类似PHP本地FPC。

再次以Magento为例,Magento提供一个插件来使用Redis作为全页缓存后端。

此外,对WordPress的用户来说,Pantheon有一个非常好的插件  wp-redis,这个插件能帮助你以最快速度加载你曾浏览过的页面。

(3)、队列

Reids在内存存储引擎领域的一大优点是提供 list 和 set 操作,这使得Redis能作为一个很好的消息队列平台来使用。Redis作为队列使用的操作,就类似于本地程序语言(如Python)对 list 的 push/pop 操作。

如果你快速的在Google中搜索“Redis queues”,你马上就能找到大量的开源项目,这些项目的目的就是利用Redis创建非常好的后端工具,以满足各种队列需求。例如,Celery有一个后台就是使用Redis作为broker,你可以从这里去查看。

(4),排行榜/计数器

Redis在内存中对数字进行递增或递减的操作实现的非常好。集合(Set)和有序集合(Sorted Set)也使得我们在执行这些操作的时候变的非常简单,Redis只是正好提供了这两种数据结构。所以,我们要从排序集合中获取到排名最靠前的10个用户–我们称之为“user_scores”,我们只需要像下面一样执行即可:

当然,这是假定你是根据你用户的分数做递增的排序。如果你想返回用户及用户的分数,你需要这样执行:

ZRANGE user_scores 0 10 WITHSCORES

Agora Games就是一个很好的例子,用Ruby实现的,它的排行榜就是使用Redis来存储数据的,你可以在这里看到。

(5)、发布/订阅

最后(但肯定不是最不重要的)是Redis的发布/订阅功能。发布/订阅的使用场景确实非常多。我已看见人们在社交网络连接中使用,还可作为基于发布/订阅的脚本触发器,甚至用Redis的发布/订阅功能来建立聊天系统!(不,这是真的,你可以去核实)。

Redis提供的所有特性中,我感觉这个是喜欢的人最少的一个,虽然它为用户提供如果此多功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.yaotu.net/news/605397.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PHP开发支付宝之网站支付--流程简介

前言 前端时间自己开发了一个drupal的支付宝模块&#xff0c;现在整理一下过程&#xff0c;因为支付宝官方网站提供的接口及文档都是新接口的&#xff0c;而且使用新接口的过程比较麻烦一点&#xff0c;所以整理一下 1.支付宝的账号必须经过企业资格的审核才可以进行正式环境的…

cache详解

什么是缓存&#xff1f; Web 应用程序通常都是被多个用户访问。一个Web站点可能存在一个“重量级”的加载&#xff0c;它能够使得站点在访问的时候&#xff0c;拖慢整个服务器。当站点被大量用户同时访问的时候&#xff0c;访问速度缓慢是大部分网站共同存在的问题。为了解决这…

(五)nginx如何调用php和php-fpm的作用和工作原理

nginx如何调用php 采用nginxphp作为webserver的架构模式&#xff0c;在现如今运用相当广泛。然而第一步需要实现的是如何让nginx正确的调用php。由于nginx调用php并不是如同调用一个静态文件那么直接简单&#xff0c;是需要动态执行php脚本。所以涉及到了对nginx.conf文件的配置…

GC算法详解

本文主要内容&#xff1a; GC的概念GC算法引用计数法&#xff08;无法解决循环引用的问题&#xff0c;不被java采纳&#xff09; 根搜索算法 现代虚拟机中的垃圾搜集算法&#xff1a; 标记-清除 复制算法&#xff08;新生代&#xff09; 标记-压缩&#xff08;老年代&#xff…

php 读取功能分割大文件实例详解

在php中&#xff0c;对于文件的读取时&#xff0c;最快捷的方式莫过于使用一些诸如file、file_get_contents之类的函数。 但当所操作的文件是一个比较大的文件时&#xff0c;这些函数可能就显的力不从心, 下面将从一个需求入手来说明对于读取大文件时&#xff0c;常用的操作方法…

Beanstalk分布式内存队列系统

Beanstalk是一个高性能、轻量级的、分布式的、内存型的消息队列系统。最初设计的目的是想通过后台异步执行耗时的任务来降低高容量Web应用系统的页面访问延迟。其实Beanstalkd是典型的类Memcached设计&#xff0c;协议和使用方式都是同样的风格。其基本设计思想很简单&#xff…

一个请求过来都经过了什么

面试的时候特别喜欢问一个问题&#xff1a;”请描述一下一个请求过来到响应完成都做了什么&#xff0c;越详细越好。” 对于一个高手来说&#xff0c;他只要回答好了这一个问题&#xff0c;技术面试就通过了。一般把这个问题的答案压缩到40分钟到1个小时。因为一般的技术面试都…

XDebug调试

本文介绍如何使用PhpStorm集成xdebug在本地开发环境进行断点调试的技巧。 我配置的环境是&#xff1a;Windows10 PhpStorm PHP5.6。 1. 下载xdebug的扩展&#xff0c;并配置到php.ini View code 第一行是加载xdebug的扩展&#xff0c;路径需根据自己的环境修改。 第二行是…

Mock方法介绍

1.现有的单元测试框架 单元测试是保证程序正确性的一种有效的测试手段&#xff0c;对于不同的开发语言&#xff0c;通常都能找到相应的单元框架。 借助于这些单测框架的帮助&#xff0c;能够使得我们编写单元测试用例的过程变得便捷而优雅。框架帮我们提供了case的管理&#xf…

sed入门详解教程

sed 是一个比较古老的&#xff0c;功能十分强大的用于文本处理的流编辑器&#xff0c;加上正则表达式的支持&#xff0c;可以进行大量的复杂的文本编辑操作。sed 本身是一个非常复杂的工具&#xff0c;有专门的书籍讲解 sed 的具体用法&#xff0c;但是个人觉得没有必要去学习它…

MySQL索引原理及慢查询优化【来源美团】

背景 MySQL凭借着出色的性能、低廉的成本、丰富的资源&#xff0c;已经成为绝大多数互联网公司的首选关系型数据库。虽然性能出色&#xff0c;但所谓“好马配好鞍”&#xff0c;如何能够更好的使用它&#xff0c;已经成为开发工程师的必修课&#xff0c;我们经常会从职位描述上…

MySQL慢查询优化、索引优化、以及表等优化总结

MySQL优化概述 MySQL数据库常见的两个瓶颈是&#xff1a;CPU和I/O的瓶颈。 CPU在饱和的时候一般发生在数据装入内存或从磁盘上读取数据时候。 磁盘I/O瓶颈发生在装入数据远大于内存容量的时候&#xff0c;如果应用分布在网络上&#xff0c;那么查询量相当大的时候那么平瓶颈…

转载kafka集群搭建

原文地址&#xff1a;https://www.dqzboy.com/kafka%E9%9B%86%E7%BE%A4%E5%AE%89%E8%A3%85%E9%83%A8%E7%BD%B2%E5%92%8C%E5%AE%9E%E8%B7%B5 一、kafka介绍 1、什么是消息队列 消息队列技术是分布式应用间交换信息的一种技术。消息队列可驻留在内存或磁盘上, 队列存储消息直到…

力扣2:两数相加

题目&#xff1a; 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这…

力扣5:最长回文子串

给你一个字符串 s&#xff0c;找到 s 中最长的回文子串。 示例 1&#xff1a; 输入&#xff1a;s "babad" 输出&#xff1a;"bab" 解释&#xff1a;"aba" 同样是符合题意的答案。 1.中心扩散法 //中心扩散法 func longestPalindrome(s stri…

etcd常见错误及解决

1."etcdserver: mvcc: database space exceeded"错误 只要你使用过 etcd 或者 Kubernetes&#xff0c;大概率见过这个错误。它是指当前 etcd db 文件大小超过了配额&#xff0c;当出现此错误后&#xff0c;你的整个集群将不可写入&#xff0c;只读&#xff0c;对业务…

golang windows64位操作系统上编译32位应用

golang windows64位操作系统上编译32位应用 将GOARCHamd64改为386 改后程序中调用sqlite会报错 Binary was compiled with CGO_ENABLED0, go-sqlite3 requires cgo to work. This is a stub 所以还需要将CGO_ENABLED设置为1

linux系统很卡的基本排查方法

1. 查看内存使用情况 free -g 当观察到free栏已为0的时候&#xff0c;表示内存基本被吃完了&#xff0c;那就释放内存吧&#xff08;释放内存参考上篇文章&#xff09; 2. 查看磁盘使用情况 df -h 当发现磁盘使用率很高时&#xff0c;那就要释放磁盘空间了&#xff0c;删除一些…

监控报警产品对比

Prometheus架构图&#xff1a;
最新文章