• Redis入门


    Redis入门

    概述

    redis是什么

    Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言]编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。当下最热门的NoSQL技术之一,也被人们称之为结构化数据库。

    redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

    Redis能做什么

    1. 内存存储、持久化。内存是断电即失,所以说持久化很重要(RDB,AOF)
    2. 效率高,可以用于高速缓存
    3. 发布订阅系统
    4. 地图信息分析
    5. 计时器、计数器(浏览量)
    6. ......

    特性

    1. 多样的数据类型
    2. 持久化
    3. 集群
    4. 事务
    5. ......

    学习中需要用到的东西

    1. 狂神的公众号:狂神说

    2. redis官网:https://redis.io

    3. 中文网:http://www.redis.cn

    4. 下载

      注意:Windows在GitHub上下载(停更很久了),不建议在Windows上使用。

    5. 在Linux上安装

    yum -y install centos-release-scl
    yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
    
    #scl命令启用只是临时的,退出shell或重启就会恢复原系统gcc版本。
    scl enable devtoolset-9 bash
    
    make install PREFIX=/usr/local/redis
    vim redis.conf 
    
    mkdir pid logs
    mkdir -p /data/redis
    
    make install PREFIX=/usr/local/redis
    
    vim /etc/profile
    export REDIS=/usr/local/redis
    export PATH=:$PATH:$REDIS/bin
    source /etc/profile
    
    1. 启动......
    2. 退出......

    简单测试性能

    # 测试:100个并发 100000个请求
    
    80.32% <= 1 milliseconds
    95.21% <= 2 milliseconds
    99.40% <= 3 milliseconds
    99.89% <= 4 milliseconds
    100.00% <= 4 milliseconds
    105152.48 requests per second
    
    1. 查看redis相关属性

      redis有16个数据库,默认使用第0个,可以用select来切换。

    2. 基本命令

      # 生产环境不要用,查看所有的key
      keys * 
      
      # set key value
      set name xxx
      
      # get key
      get name
      
      # 选择数据库
      select index
      
      # 清空所有数据库
      flushall
      
      # 清单当前数据库
      flushdb
      

    性能分析

    redis在6版本以前是单线程,在6版本的时候,是多线程了。

    redis是基于内存操作,CPU不是redis的性能瓶颈,redis的性能瓶颈是根据机器的内存和网络带宽来决定的。

    为什么单线程还这么快?

    redis是C语言写的,官方提供的数据是10w+的QPS。

    误区:

    1. 高性能的服务器一定是多线程的?
    2. 多线程(CPU会上下文切换,耗时的操作)一定比单线程效率高?

    核心:redis是将所有的数据全部放在内存中,所以说单线程效率就是最高的。IO多路复用。多线程,对于内存系统来说,如果没有上下文切换,效率就是最高的,多次读写都是在一个CPU上的,在内存情况下,这个就是最佳的方案。

    I/O多路复用

    I/O 多路复用模型

    I/O 多路复用模型是利用 select、poll、epoll 可以同时监察多个流的 I/O 事件的能力,在空闲的时候,会把当前线程阻塞掉,当有一个或多个流有 I/O 事件时,就从阻塞态中唤醒,于是程序就会轮询一遍所有的流(epoll 是只轮询那些真正发出了事件的流),并且只依次顺序的处理就绪的流,这种做法就避免了大量的无用操作。

    这里“多路”指的是多个网络连接,“复用”指的是复用同一个线程。采用 I/O 多路复用技术可以让单个线程高效的处理多个连接请求(尽量减少网络 IO 的时间消耗),且 Redis 在内存中操作数据的速度非常快,也就是说内存内的操作不会成为影响Redis性能的瓶颈,主要由以上几点造就了 Redis 具有很高的吞吐量。

  • 相关阅读:
    Entity Framework 出现 "此 ObjectContext 实例已释放,不可再用于需要连接的操作" 的错误
    JS 页面加载触发事件 document.ready和window.onload的区别
    C# 控制台程序实现 Ctrl + V 粘贴功能
    网站推广必备的16个营销工具
    C# 如何捕获键盘按钮和组合键以及KeyPress/KeyDown事件之间的区别 (附KeyChar/KeyCode值)
    jQuery问题集锦
    zend studio打开文件提示unsupported character encoding
    简单的Jquery焦点图切换效果
    HTML实体符号代码速查表
    心得感悟
  • 原文地址:https://www.cnblogs.com/liuhuan086/p/13578947.html
Copyright © 2020-2023  润新知