Redis特性

  1. 速度快。

  2. 持久化。

  3. 包含多种数据结构。

  4. Redis通信协议简单,可以支持多种编程语言。

  5. 功能丰富,包括发布/订阅,事务,pipeline(可以提高性能),Lua脚本(可以实现一些自定义命令),BitMap(位图,一种可以用很小的内存空间来实现高效的存储),HyperLogLog(超小内存唯一值计数),GEO(地理信息定位,一般用于很多OTO的服务,可以算出某块区域最近的商店等)。

  6. 主从复制功能,是下面特性7的基础。

  7. 支持高可用(Redis2.8版本提供了Redis-Sentinel功能),分布式(Redis3.0版本提供了Redis-Cluster支持分布式功能)。

  8. Redis代码不依赖于外部库,不像Memcache的事件是依赖于Lievent这个事件库的,Redis是自己实现的。

  9. 采用单线程模型,可以提高性能同时服务/客户端开发也会相对容易。

 

Redis快的主要原因

Redis官方说明Redis可以支持10w OPS,也就是每秒可以支持10万次的读写。

    1. Redis完全基于内存,Redis将所有数据都放在内存中,而内存的读取访问速度本身就是很快的。

     看看各个存储器读写性能对比

类型 每秒读写次数 随机读写延时 访问带宽
内存 千万级别 80ns(纳秒) 5GB
SSD 3500 0.1 - 0.2ms(毫秒) 100 - 300MB
机械硬盘 100左右 10ms 100MB左右

    2. Redis是由c语言开发,而c语言是一种离操作系统很近的语言,性能也很高。Redis总的代码量也就几万行,非常精简,代码质量也非常高,对于Redis的性能也是由很大影响的。

    3. Redis底层的一些数据结构设计简单,对数据操作也简单。

    4. Redis的线程模型是采用了单线程的工作模式,避免了线程切换和竞态消耗。一般在使用多线程的时候,如果没有达到合理的使用往往有时候会比单线程更慢,反而会成为并发的瓶颈。

    5. Redis使用的是epoll这样的非阻塞多路 I/O 复用模型,在加上redis自身实现了一个事件处理,将epoll的读写关闭转换成自身的一个事件,从而不再I/O上浪费过多时间。这个也是它快的一个原因。  

Redis单线程使用特点

  1.一次只运行一条命令,比如在使用incr命令来实现计数器功能时候,不会因为并发而产生计数错误的情况。

  2.不适合执行长/慢的命令,尤其在高可用的时候,因为Redis是在前面一个命令执行完之后在执行下一个命令,当前面一个命令执行时间长了,会阻塞后面的命令,比如keys ,flushall ,flushdb,slow lua script,mutil/exec,operate big value(collection)。

单进程单线程好处

  1. 代码更清晰,处理逻辑更简单。
  2. 不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗。
  3. 不存在多进程或者多线程导致的切换而消耗CPU。

1、基本原理
  采用多路
I/O 复用技术可以让单个线程高效的处理多个连接请求(尽量减少网络IO的时间消耗)
。“多路”指的是多个网络连接,“复用”指的是复用同一个线程。采用多路 I/O
复用技术可以让单个线程高效的处理多个连接请求(尽量减少网络IO的时间消耗)。可以直接理解为:单线程的原子操作,避免上下文切换的时间和性能消耗;加上对内存中数据的处理速度,很自然的提高redis的吞吐量。

(1)为什么不采用多进程或多线程处理?

多线程处理可能涉及到锁 
多线程处理会涉及到线程切换而消耗CPU

单线程处理的缺点?

无法发挥多核CPU性能,不过可以通过在单机开多个Redis实例来完善

Redis不存在线程安全问题? 
   Redis采用了线程封闭的方式,把任务封闭在一个线程,自然避免了线程安全问题,不过对于需要依赖多个redis操作的复合操作来说,依然需要锁,而且有可能是分布式锁。

其它开源软件采用的模型

  Nginx:多进程单线程模型 
  Memcached:单进程多线程模型

Redis

  优点:单线程无需处理并发问题,保证命令的原子性,降低系统复杂度,因为同一时刻只能处理一个请求。

  缺点:不适合存储大尺寸对象(超过100kb)

Redis三种启动方式

  1.  直接启动。进入Redis根目录然后执行命令redis-server就可以启动Redis,一般会加上 & 号使Redis以后台程序方式运行 ./redis-server & ,  该方式会使用Redis的一个默认配置。

  2. 动态参数启动。可以指定一些默认的参数。比如我们设置Redis启动监听端口是6380, ./redis-server --port 6380 &

  3. 配置文件启动。将启动参数都写入配置文件中。./redis-server configPath &

    生产环境中建议使用配置文件启动,一般一台机器上会部署多台Redis,每个Redis都配置文件可以用不同的端口号进行区分。

Redis配置文件常用配置

  1. daemonize:是否是守护进程方式对Redis进行启动,默认情况下是no,Redis不是以守护进程的方式运行,一般生产环境,把该项的值更改为 yes。

    2. requirepass:密码 下图是我本机的配置

     

  3. port:Redis对外使用的端口号,默认端口是6379,在单机多实例情况下是必须要设置的。

      4. pidfile:当Redis以守护进程方式运行时,PID文件存放位置,一般是/var/run/redis.pid。

      5. logfile:Redis系统日志文件名。

    6. dir:Redis工作目录。

    7. timeout :当客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能。
      8. tcp-keepalive : 注意和http keepalive的区别,该选项合理的值是60秒。
    9. loglevel verbose :指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose。
    10. databases : 数据库 默认数据库是DB 0。

      11. rdbcompression:指定存储至本地数据库时是否压缩数据,默认设定的'是',采用LZF算法实现,可以减小空间。

    12. dbfilename:存储数据库的文件名 默认是dump.rdb。

Redis典型应用场景

  1.  缓存系统。这个也是Redis最常使用的功能,比如缓存商品的价格而不用直接去Mysql等数据库查询,从而提高查询速度。

  2. 计数器。

    比如下面一条微博的评论数,转发数,点赞数都是可以用Redis来完成。很多视频网站都可以用Redis来记录播放量。

    

  3. 消息队列功能。比如Redis的发布订阅功能,阻塞队列,对于一些功能简单的消息队列用途可以使用Redis来实现。

  4. 排行榜功能,比如游戏排行榜, 阅读排行榜。下面就是一个问答排行榜。

       

  5. 实时系统。

  6. 分布式id生成。当多个应用并发的去获取id都是自增不重复的。使用Redis提供的incr命令(原子操作)。

    

7. 时间轴列表。比如微博的feed流,可以使用Redis的列表(List)来实现,因为List本身就是排序的。

Redis客户端

  除了Redis自带的客户单redis-cli,其他编程语言也提供了对Redis操作的客户端,下面介绍其中几个。

  一. Java客户端:Jedis,Jedis是一款基于java开发的Redis客户端。

【redis】redis配置文件参数解析的更多相关文章

  1. redis常用配置参数解析

    本文主要总结一下redis常用的配置参数的用法: 以下参数决定redis运行方式,默认前台运行,修改为yes可以让redis以后台守护进程方式运行 daemonize no 以下参数指定redis的p ...

  2. redis.conf配置文件配置项解析

    知识来源于 : https://blog.csdn.net/bsfz_2018/article/details/79061413[Redis在linux下的安装] daemonize:如需要在后台运行 ...

  3. Redis -- 02 配置文件解析

    redis的配置文件为 redis.conf, 使用 ./redis-server /path/to/redis.conf 可以根据自定义的配置启动redis实例 include // 引入其他配置文 ...

  4. [redis] Redis 配置文件置参数详解

    ################################ 基础配置 ################################# #daemonize no 默认情况下, redis 不 ...

  5. Redis学习四:解析配置文件 redis.conf

    一.它在哪 地址: 思考:为什么要将它拷贝出来单独执行? 二.Units单位 1 配置大小单位,开头定义了一些基本的度量单位,只支持bytes,不支持bit 2 对大小写不敏感 三.INCLUDES包 ...

  6. redis配置文件参数详解

    配置文件参数说明: 1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程 daemonize no 2. 当Redis以守护进程方式运行时,Redis默认会把pi ...

  7. Redis的配置文件redis.conf的解析

    1.redis的配置文件为redis.conf 2.redis配置文件redis.conf中关于网络的配置 3.redis配置文件redis.conf中的日志配置 4.redis配置文件redis.c ...

  8. python 全栈开发,Day101(redis操作,购物车,DRF解析器)

    昨日内容回顾 1. django请求生命周期? - 当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端 请求头和请求体中会包含浏览器的动作(action),这个动作通常为get或者po ...

  9. 曹工说Redis源码(5)-- redis server 启动过程解析,以及EventLoop每次处理事件前的前置工作解析(下)

    曹工说Redis源码(5)-- redis server 启动过程解析,eventLoop处理事件前的准备工作(下) 文章导航 Redis源码系列的初衷,是帮助我们更好地理解Redis,更懂Redis ...

随机推荐

  1. tomcat8.0部署启动

    http://tomcat.apache.org/download-80.cgi 打开命令行提示符窗口, 进入Tomcat安装目录, 进入bin目录下, 输入:service.bat install  ...

  2. C#Note13:如何在C#中调用python

    前言 IronPython 是一种在 .NET 及 Mono上的 Python 实现,由微软的 Jim Hugunin(同时也是 Jython 创造者) 所发起,是一个开源的项目,基于微软的 DLR ...

  3. hive排序

    1.升序排序 hive > select  id,name,sal from emp order by sal; 2.降序  添加关键字desc hive > select  id,nam ...

  4. valgrind 检查内存泄露

    https://www.oschina.net/translate/valgrind-memcheck

  5. django migrate报错(提前删除表等)

    python3 manage.py makemigrations python3 manage.py migrate ##报错 改为##更改migrates的状态 python3 manage.py ...

  6. Python 第三方库 cp27、cp35 等文件名的含义(转)

    转自 https://blog.csdn.net/lanchunhui/article/details/62417519 转自 https://stackoverflow.com/questions/ ...

  7. 如何调用layer.open打开的的iframe窗口中的JS

  8. 学习 Spring (十六) AOP API

    Spring入门篇 学习笔记 Spring AOP API 是 Spring 1.2 历史用法,现在仍然支持 这是 Spring AOP 基础,现在的用法也是基于历史的,只是更简便了 Pointcut ...

  9. SharePoint Server 2016 - Configure Office Online Server

    Step 1: Create the binding between SharePoint 2016 and Office Web Apps Server   To get started, open ...

  10. Running Web API using Docker and Kubernetes

    Context As companies are continuously seeking ways to become more Agile and embracing DevOps culture ...