Redis介绍和安装流程

Redis简述

  • 即远程字典服务,使用ANSI C开发,支持网络、基于内存可持久化的日志型、NoSQL(非关系型数据库)开源内存数据库,提供多种语言的API

  • 这是一个key-value存储系统,支持String字符串,List链表,Set集合,Zest有序集合和Hash哈希等类型

  • 非关系型数据库

    • 键值存储数据库

      如Map的K-V存储数据库,Redis等

    • 列存储数据库

      关系型数据库是典型的行存储数据库,其存储时占用连续的存储空间,不适合大量数据存储。按列存储可以实现分布式存储,适合大量存储,如HBase

    • 文档型数据库

      如MongoDB,是NoSql和关系型数据库的结合,把记录存储为JSON

    • 图形数据库

      用于存放数据节点间关系的数据库,如Neo4j

  • Redis的主要用途是数据缓存

    • 当客户端高并发请求服务器,数据库可能导致高访问的性能瓶颈,此时需要加入缓存层来减少数据库的访问
    • 缓存层和数据库和服务器交互,缓存层位于内存,而数据库是存储在磁盘上,导致缓存层可以有更高的并发性能
    • 写请求不通过缓存层,直接与数据库进行交互,可能导致缓存数据失效
      • 缓存数据分类:
        • 实时同步数据:要求缓存中数据和DB中保持一致,如果数据库数据改变,缓存中对应数据立刻删除(失效)
        • 阶段性同步数据:没有必要实时和数据库中保持同步,非关键信息。为缓存数据添加生存时长,超过一定时长就使得数据失效。可以在服务器warmup阶段加载这些关键的数据

Redis特性

  • 性能极高,读写速度超过11w次/s和8w次/s

    • 数据操作完全在内存中
    • 使用C语言开发
    • 基于K-V键值对,查询快
  • 可持久化,可以进行内存到磁盘的持久化,数据安全。使用RDB和AOF两种方式

  • 高可用集群,提供了高可用的主从集群功能,保证系统的安全性和健壮性

  • 丰富的数据类型,是一种key-value存储系统

    • String字符串、List链表、Set集合、Zest有序集合、Hash哈希类型
    • BitMap(大数据量的二值性统计)、HyperLogLog(超级日志记录,对大量数据进行去重统计)、Geospatial(地理空间,主要用于地理位置相关计算)
  • 功能强大,如设置数据生存时长、发布/订阅(简单消息系统)、简单事务、支持Lua脚本

  • 支持语言广泛,提供了简单的TCP通讯协议,编程语言可以简单接入Redis

  • 支持ACL权限控制,自redis6开始引入,为不同用户定制不同权限

    ACL,Access Control List,一种细粒度权限管理策略,可以针对任意用户与组进行权限控制(Unix和Linux2.6之后支持ACL)

    UGO,User Group Other是Unix和Linux默认的权限管理,是一种粗粒度的权限管理

  • 支持多线程IO模型,自redis6之后支持

Redis的IO模型

Redis客户端提交的请求是如何被Redis处理的,这种处理架构乘坐Redis的IO模型

单线程模型

Redis3.0之前,使用单线程模型,所有客户端的请求都是被一个线程处理的。经过事件分发器后,对应的请求被放置任务队列中,使用一个线程选择对应的事件处理器处理任务队列中的任务,采用了多路复用技术。单线程模型可以避免并发问题,但性能不高。

多路复用技术:多路复用器的多路选择算法常见有三种,select模型(数组实现)、poll模型(链表实现)和epoll模型。

  • poll模型:采用轮询算法,依次查询列表中已就绪可以处理的任务并进行选择。完整寻找一次列表后选择可处理的任务处理,导致了处理任务的延迟
  • epoll模型:采用回调模式,对每个列表中的任务设置回调函数,就绪后触发回调函数通知多路选择器将任务加入处理队列即可。可以分为LT模型和ET模型
混和线程模型

处理任务队列的线程进行fork,产生一些子线程来处理任务队列中的任务,但连接请求处理仍然是单线程。

多线程模型

多线程模型会将请求按照请求顺序均衡分配给多个事件分发器,通过多个对应的IO线程将任务解析后放入一个任务队列,使用一个主线程处理任务队列中的请求。相当于使用多线程解析事件请求的类型,而主线程只负责执行执行。

模型优缺点总结
  • 单线程模型:
    • 优点:可维护性高,没有并发操作带来的问题(执行顺序不确定,线程切换开销,加锁/解锁问题)
    • 缺点:性能较低,不能利用多核
  • 多线程模型:
    • 优点:结合了单线程和多线程的优点
    • 缺点:在主线程处理任务队列时仍是单线程,不能算作完全的多线程模型

Redis安装

  • 下载Redis7 https://redis.io/download/

  • 将 下载的压缩包放入linux服务器,一般放在opt目录下

  • 解压压缩包

    tar -zxvf redis-7.0.10.tar.gz
    
  • 进入redis目录,在目录下执行编译和安装

    make && make install
    
  • 安装完成后,可以看到进行测试的提示 “Hint: It’s a good idea to run ‘make test’ 😉”

  • 查看默认安装目录 /usr/local/bin 中的Redis工具

    • redis-benchmark 性能测试工具,可以在服务启动后运行来测试服务器性能
    • redis-check-aof 修复有问题的AOF文件
    • redis-check-dump 修复有问题的dump.rdb文件
    • redis-cli 客户端,操作入口
    • redis-sentinel redis集群服务
    • redis-server Redis服务器启动命令
  • 配置Redis配置文件,在opt/redis/redis.conf,但是一般不直接修改默认配置,所以拷贝一份该文件到目录再修改

    mkdir /myredis
    cp redis.conf /myredis/redis7.conf
    
    • 修改daemonize no 为 yes,使得其在后台启动而不占用控制台
    • 修改protected-mode yes 改为 no,使得本机外可以访问Redis
    • 注释掉 bind 127.0.0.1 -::1,运行远程ip连接
    • 取消requirepass的注释,并自行设置一下密码
  • 启动Redis服务,因为修改了配置,所以启动时需要指定配置文件的目录,没有反应则可以查看是否启动了服务

    redis-server /myredis/redis7.conf
    ps -ef | grep redis|grep -v grep
    
  • 连接Redis服务,即可进入redis客户端

    redis-cli -a password -p 6379
    

    如果登录时没有指定密码,则需要在客户端中输入授权

    auth password
    
  • 使用ping来查看是否连接存活,如果返回PONG则成功连接;可以进行测试

    127.0.0.1:6379> set k1 helloworld!
    OK
    127.0.0.1:6379> get k1
    "helloworld!"
    
  • 关闭

    • 单实例关闭,直接使用SHUTDOWN在cli中关闭Redis服务

    • 多实例关闭(可能存在多个端口)

      redis-cli -p 6379 shutdown
      
  • 卸载

    • 停止redis-server服务
    • 删除 /usr/local/lib 下全部和redis相关的服务

图形客户端

  • Redis Desktop Manager (https://resp.app)

    https://github.com/RedisInsight/RedisDesktopManager/releases/tag/0.8.8

  • RedisPlus

  • Java代码客户端

    Java对应的API,类似JDBC,是多个对应的jar包,提供了对Redis的接口操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值