zoukankan      html  css  js  c++  java
  • redis相关综合问题

    一、redis高并发和快速的原因

    (1)redis是基于内存的,而内存的读写速度非常快;
    (2)redis是单线程的,因而省去了很多上下文切换线程的时间;
    (3)redis使用多路复用技术,可以处理并发的连接。非阻寒IO内部实现采用epoll,采用了epoll+自己实现的简单事件框架。epoll中的读写、关闭、连接都转化成了事件,然后利用epoll的多路复用特性。

    Redis是纯内存数据库,一般都是简单的存取操作,线程占用的时间很多,时间的花费主要集中在IO上,所以读取速度快。
    Redis使用的是非阻塞IO,IO多路复用使用了单线程来轮询描述符,将数据库的开、关、读、写都转换成了事件,减少了线程切换时上下文的切换和竞争。
    Redis采用了单线程的模型,保证了每个操作的原子性,也减少了线程的上下文切换和竞争。
    Redis采用自己实现的事件分离器效率比较高,内部采用非阻塞的执行方式,吞吐能力比较大。


    二、Redis也可以用来做消息队列,消息订阅与发布。

    subscribe channel:订阅频道,例如:subscribe jasontest,订阅jasontest这个频道。
    psubscribe channel*:批量订阅频道,例如:psubscribe jason* 表示订阅以jason开头的频道。
    publish channel content:在指定的频道中发布消息,例如:publish jasontest "jason say hello!"


    三、常见问题

    1、使用Redis有哪些好处?
    (1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1);
    (2) 支持丰富的数据类型,支持string,list,set,sorted set,hash;
    (3) 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行;
    (4) 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除key。

    2、redis相比memcached有哪些优势?
    (1) memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型;
    (2) redis的速度比memcached快很多;
    (3) redis可以持久化其数据;

    3、Memcache与Redis的区别都有哪些?
    (1)存储方式
    Memecache把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小。Redis有部份存在硬盘上,这样能保证数据的持久性。
    (2)数据支持类型
    Memcache对数据类型支持相对简单。Redis有复杂的数据类型。
    (3)使用底层模型不同
    它们之间底层实现方式,以及与客户端之间通信的应用协议不一样。Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。

    (4)value大小
    redis最大可以达到1GB,而memcache只有1MB。

    4、MySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据?
    redis内存数据集大小上升到一定大小的时候,就会执行数据淘汰策略。redis 提供了6种数据淘汰策略,分别如下所示:
    (1)voltile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰;
    (2)volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰;
    (3)volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰;
    (4)allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰;
    (5)allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰;
    (6)no-enviction(驱逐):禁止驱逐数据。

  • 相关阅读:
    Python3和高性能全文检索引擎Redisearch进行交互
    Django项目连接多个数据库配置
    Redisearch实现的全文检索功能服务
    python一键搭建ftp服务
    yum提示错误: error: rpmdb: BDB0113 Thread/process 9866/140290246137664 failed:
    Django + FastDFS (分布式远程服务器存储文件)
    Docker来搭建分布式文件系统FastDfs
    VSCode---REST Client接口测试辅助工具
    在Centos下使用Siege对Django服务进行压力测试
    Mysql联合索引的最左前缀原则以及b+tree
  • 原文地址:https://www.cnblogs.com/jasonboren/p/13921759.html
Copyright © 2011-2022 走看看