Skip to content

Redis简介

基本概念

MySQL与Redis的区别

  • MySQL:属于关系型数据库的一种,存储数据的时候使用的是表结构。
  • Redis:属于非关系型数据库中的一种,存储数据的时候,使用键值对的形式。

什么是NoSQL?

在我们日常的开发中,无不都是使用数据库来进行数据的存储,由于一般的系统任务中通常不会存在的情况,所以这样看起来并没有什么问题,可是一旦涉及大数据量的需求,比如一些商品抢购的情景,或者是主页访问量瞬间较大的时候,单一使用数据库来保存数据的系统会因为面向磁盘,而存在严重的性能弊端,一瞬间成千上万的请求到来,需要系统在极短的时间内完成,这个时候往往不是数据库能够承受的,极其容易造成数据库系统瘫痪,最终导致服务宕机的严重生产问题。

为了克服上述的问题,项目通常会引入NoSQL技术,这是一种基于内存的数据库,并且提供一定的持久化功能。

NoSQL,指的是。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。对NoSQL最普遍的解释是"非关联型的",强调Key-Value Stores和文档数据库的优点,而不是单纯的反对RDBMS。

NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。

NoSQL的分类

  • 基于键值对 key-value类型:Redis,memcached
  • 列存储数据库 Column-oriented Graph:HBase
  • 图形数据库 Graphs based:Neo4j
  • 文档型数据库: MongoDB
    • MongoDB是一个基于分布式文件存储的数据库,主要用来处理大量的文档

Redis是什么?

Redis取自Remote Dictionary Service中的字母拼写而来,Remote Dictionary Service中文意为远程字典服务器。

Redis 是一个开源(BSD许可)的,C语言编写的,高性能的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它基于内存运行并支持持久化的NoSQL数据库,是当前最热门的NoSQL数据库之一。

相关网站:

Redis的概念

远程字典服务器,使用C语言进行编程的,开源的。可以用作数据库、缓存和消息中间件。基于内存并且支持持久化。

redis中文官网:http://www.redis.com.cn/ redis英文官网:https://redis.io/

Redis的特性

Redis是一个字典结构的存储服务器,而实际上一个Redis实例提供了多个用来存储数据的字典,客户端可以指定将数据存储在哪个字典中。这与我们熟知的在一个关系数据库实例中可以创建多个数据库类似,所以可以将其中的每个字典都理解成一个独立的数据库。

每个数据库对外都是一个从0开始的递增数字命名,Redis默认支持(可以通过配置文件支持更多,无上限),可以通过配置databases来修改这一数字。

Redis与其他 key-value 缓存产品有以下三个特点:

  • 支持持久化
  • 支持丰富的数据类型, 包括:string、list、set、sort set、hash
  • 支持数据的备份,也就是主从复制

Redis的优点

  • 性能极高:每秒可以读11w次、每秒可以写8.1w次
  • 丰富的数据类型:Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
  • 原子:Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
  • 丰富的特性:Redis还支持publish/subscribe, 通知, key过期等等特性。

安装Redis

https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/

  1. redis官网上下载最新安装包到家目录

    bash
    wget https://download.redis.io/redis-stable.tar.gz
  2. 解压压缩包,然后会在家目录下面生成一个对应文件夹

    bash
    tar -xaf redis-stable.tar.gz
  3. 进入到解压后的目录redis-x.x.x,然后执行make

    bash
    cd redis-stable
    
    # 编译需要安装pkg-config
    sudo apt install pkg-config
    
    make
    sudo make install
  4. 进入utils目录接着进入到install_server.sh文件,注释掉下面的内容(大约在77行,有8行,shell的注释是以#进行的注释)

    bash
     76 #bail if this system is managed by systemd
    77 #_pid_1_exe="$(readlink -f /proc/1/exe)"
    78 #if [ "${_pid_1_exe##*/}" = systemd ]
    79 #then
    80 #       echo "This systems seems to use systemd."
    81 #       echo "Please take a look at the provided example service unit files in this directory, and adapt and install     them. Sorry!"
    82 #       exit 1
    83 #fi
    84 #unset _pid_1_exe

    注释之后,保存退出并且执行下面命令

    bash
    $ sudo ./install_server.sh
    Welcome to the redis service installer
    This script will help you easily set up a running redis server
    
    Please select the redis port for this instance: [6379]
    Selecting default: 6379
    Please select the redis config file name [/etc/redis/6379.conf]
    Selected default - /etc/redis/6379.conf
    Please select the redis log file name [/var/log/redis_6379.log]
    Selected default - /var/log/redis_6379.log
    Please select the data directory for this instance [/var/lib/redis/6379]
    Selected default - /var/lib/redis/6379
    Please select the redis executable path [/usr/local/bin/redis-server]
    Selected config:
    Port           : 6379
    Config file    : /etc/redis/6379.conf
    Log file       : /var/log/redis_6379.log
    Data dir       : /var/lib/redis/6379
    Executable     : /usr/local/bin/redis-server
    Cli Executable : /usr/local/bin/redis-cli
    Is this ok? Then press ENTER to go on or Ctrl-C to abort.
    Copied /tmp/6379.conf => /etc/init.d/redis_6379
    Installing service...
    Success!
    Starting Redis server...
    Installation successful!
    $
  5. 检查redis-cli安装成功后的命令行

    bash
    $ redis-cli
    127.0.0.1:6379>
    127.0.0.1:6379> ping
    PONG
    127.0.0.1:6379> exit
    $

基本命令

单进程模型来处理客户端的请求,对读写等事件的响应通过对epoll的包装来做到。

默认16个数据库,编号0-15,可以通过select + num切换数据库

bash
# 数据库的切换select
select + index

# 查看当前数据库下的key值,问号表示占位符
keys *       keys k?

# 把key从当前库移动到目标库
Move key [num]  

# 判断key是否存在
Exists key

# 查看key的类型
Type key 

# 删除某个key
del  key

# 查看当前数据库的大小
dbsize

# 清空当前数据库
flushbd   

# 清空所有的数据库
flushall

# 设置过期时间
expire key seconds

# 通过ttl查看剩余时间
ttl key   #-1代表永不过期  -2代表已经过期

配置文件

1、配置文件的路径

bash
/etc/redis下面有个6379.conf文件

2、关闭redis服务器

bash
在redis客户端执行shutdown命令;
也可以使用kill -9杀死进程;

3、启动redis服务器

bash
sudo  redis-server /etc/redis/6379.conf  
sudo redis-server + 配置文件的路径

Units

配置大小单位,定义了一些基本度量单位,只支持bytes,不支持bit,对大小写不敏感。

Network

bash
bind 127.0.0.1  # 绑定的ip
protected-mode yes # 保护模式
port  6379  # 端口

General

bash
daemonize yes # 以守护进程方式运行
loglevel  notice  # 日志级别
database  16  # 数据库数量

snapshoting

保存快照

bash
save 900 1              
# 在900秒(15分钟)之后,如果至少有1个key发生变化,则dump内存快照。

save 300 10            
# 在300秒(5分钟)之后,如果至少有10个key发生变化,则dump内存快照。

save 60 10000       
# 在60秒(1分钟)之后,如果至少有10000个key发生变化,则dump内存快照。

快照文件名

bash
dbfilename dump.rdb

保存目录名

bash
dir /var/lib/redis/6379

APPEND ONLY MODE

bash
appendonly yes  # 是否使用AOF持久化方式。默认不使用
appendfilename “appendonly6381.aof“  #持久化的AOF文件名

在Redis的配置文件中存在三种AOF同步方式,它们分别是:

bash
appendfsync always     #每次有数据修改发生时都会写入AOF文件。
appendfsync everysec  #每秒钟同步一次,该策略为AOF的缺省策略。
appendfsync no          #从不同步。高效但是数据不会被持久化。