Redis6课件.docx

Nosql

泛指非关系型的数据库,作为关系型数据库的补充,不依赖业务逻辑方式存储,而以简单的key-value模式存储。应对基于海量用户和海量数据前提下的数据处理问题。主要用于解决性能问题

特征:

可扩容,可伸缩 ; 大数据量下高性能 ;灵活的数据模型 ; 高可用

Nosql不适用于需要事务支持;基于sql的结构化查询存储的关系

redis

Redis (REmote DIctionary Server) 是用 C 语言开发的一个开源的高性能键值对(key-value)数据库,数据都缓存在内存中,支持持久化,主要用作备份恢复

特征:

  1. 数据间没有必然的关联关系
    2. 内部采用单线程机制进行工作
    3. 高性能
    4. 多数据类型支持(string、list、hash、set、sorted_set)
    5. 持久化支持。可以进行数据灾难恢复

redis的操作是原子性的:原子操作是指不会被线程调度机制打断的操作;操作开始后就运行到结束。redis单命令原子性得益于它的单线程

Redis相关知识

Redis是单线程搭配多路IO复用技术:多路复用是指使用一个线程来检查多个文件描述符(Socket)的就绪状态
//看专栏补上理论知识点

安装

安装C 语言的编译环境

  1. yum install centos-release-scl scl-utils-build
  2. yum install -y devtoolset-8-toolchain
  3. scl enable devtoolset-8 bash
  4. //测试 gcc版本
  5. gcc --version

image.png
解压安装包

  1. //解压安装包
  2. tar -zxvf redis-6.2.1.tar.gz
  3. //进入安装目录
  4. cd redis-6.2.1
  5. //编译成c文件
  6. make
  7. 若没有准备好C语言编译环境,make 会报错—Jemalloc/jemalloc.h:没有那个文件
  8. //清除后再次make编译
  9. make distclean
  10. //安装编译好的东西
  11. make install
  12. 默认安装到 /usr/local/bin 目录下

前台启动
出现redis服务器图标

  1. redis-server

后台启动

备份redis.conf到其他目录

  1. cd redis-6.2.1
  2. //复制conf文件
  3. cp redis.conf /etc/redis.conf
  4. //修改redis.conf文件将里面的daemonize 改为yes 保存
  5. vi redis.conf
  6. #启动redis
  7. cd /usr/local/bin
  8. redis-server /etc/redis.conf
  9. //查看redis进程
  10. ps -ef | grep redis

连接与关闭

  1. #客户端连接redis
  2. redis-cli
  3. //多个端口可以
  4. redis-cli -p 6379 //6379是端口号
  5. #关闭
  6. shutdown
  7. //单实例关闭
  8. redis-cli shutdown

Redis为什么快

  1. 完全基于内存,非常快速。数据存在内存中
  2. 采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗CPU, 不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗
  3. 使用多路I/O 复用模型, 非阻塞IO

Redis为什么会比MySQL快

  1. Redis是基于内存存储的,MySQL是基于磁盘存储的
  2. Redis存储的是k-v格式的数据。时间复杂度是O(1),常数阶,而MySQL引擎的底层实现是B+Tree,时间复杂度是O(logn),对数阶
  3. MySQL数据存储是存储在表中,查找数据时要先对表进行全局扫描或者根据索引查找,这涉及到磁盘的查找,磁盘查找如果是按条点查找可能会快点,但是顺序查找就比较慢;而Redis不用这么麻烦,本身就是存储在内存中,会根据数据在内存的位置直接取出。
  4. Redis是单线程的多路复用IO,单线程避免了线程切换的开销,而多路复用IO避免了IO等待的开销,在多核处理器下提高处理器的使用效率可以对数据进行分区,然后每个处理器处理不同的数据。