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. Yii的操作提示框

    效果如图 HTML + CSS<style> div.error{ background: #FFE0E0; border: 2px solid #FFA0A0; padding: 10p ...

  2. React Native之通知栏消息提示(android)

    React Native之通知栏消息提示(android) 一,需求分析与概述 1.1,推送作为手机应用的基本功能,是手机应用的重要部分,如果自己实现一套推送系统费时费力,所以大部分的应用都会选择使用 ...

  3. [转帖]震惊,用了这么多年的 CPU 利用率,其实是错的

    震惊,用了这么多年的 CPU 利用率,其实是错的 2018年12月22日 08:43:09 Linuxer_ 阅读数:50 https://blog.csdn.net/juS3Ve/article/d ...

  4. git遇到的问题 .Git: There is no tracking information for the current branch.

    1.Git: There is no tracking information for the current branch. 在执行git pull的时候,提示当前branch没有跟踪信息: git ...

  5. Linux基础学习(12)--Linux服务管理

    第十二章——Linux服务管理 一.服务简介与分类 1.服务的分类: 注:独立的服务放在内存中(好处:响应的速率快,坏处:独立的服务越多,耗费的内存资源越多):xinetd服务本身是独立的,在内存中, ...

  6. Linux基础学习(11)--Shell编程

    第十一章——Shell编程 一.基础正则表达式 1.正则表达式与通配符(*,?,[ ]): 2.基础正则表达式: 二.字符截取命令 1.cut字段提取命令: 空格分割时,不知道空格有多少个,无法分割行 ...

  7. 如何在cmd中集成git

    1.要在cmd中集成git,要解决在cmd中输入git命令时不提示git不是内部或外部命令: 即需要将git添加到path变量中,即将D:\Git\mingw64\bin和D:\Git\mingw64 ...

  8. Zend Framework2从入门到精通

    1. 下载安装zf2的web程序 步骤: 第一步,保证得到一个基本的zf2框架 直接从官网下载并解压即可:http://www.zendframework.org.cn/downloads/lates ...

  9. shiro使用ajax登陆实现,success但页面无法跳转的问题

    首先:简述一下登陆的后台流程 页面提交——>对应controller中的方法——>对应Realm认证——>controller返回 json 这样,无论成功与否,都有返回值,可以用 ...

  10. vue表單

    使用v-model進行表單雙向數據綁定. 可以根據控件決定數據的類型,可以綁定input.單選.複選.下拉框等 可以使用number和trim等修飾符.