目录

redis概述

是什么

Redis:REmote DIctionary Server(远程字典服务器)是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(key/value)分布式内存数据库,基于内存运行 并支持持久化的NoSQL数据库,是当前最热门的NoSql数据库之一,也被人们称为数据结构服务器。

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

  • Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用
  • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储
  • Redis支持数据的备份,即master-slave模式的数据备份

云数据库 Memcache 版实例中的数据是存储在内存中的,当出现宕机、机房断电等意外,或是云数据库 Memcache 版实例在正常升级维护时,内存中的数据均会丢失。因此,云数据库 Memcache 版不能作为持久化的数据存储服务使用。

能干嘛

  • 内存存储和持久化:redis支持异步将内存中的数据写到硬盘上,同时不影响继续服务
  • 取最新N个数据的操作,如:可以将最新的10条评论的ID放在Redis的List集合里面
  • 模拟类似于HttpSession这种需要设定过期时间的功能
  • 发布、订阅消息系统
  • 定时器、计数器

去拿下

怎么玩

  • 数据类型、基本操作和配置
  • 持久化和复制,RDB/AOF
  • 事务的控制
  • 复制(主从关系)

安装

{%post_link 工作/300_DevOps/linux/centos使用篇 centos使用篇%} / redis安装部分

这里推荐使用docker安装,快捷方便

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# 1. 查看镜像来源
$ docker search redis
# 2. 下载镜像
docker pull redis
# 3. 从官网(http://download.redis.io/redis-stable/redis.conf)下载redis.conf放到配置文件目录
# david @ Davids-Macbook-Pro in /tmp/docker/redis [21:07:23]
$ ls
redis.conf
# 4. 修改启动默认配置
bind 127.0.0.1 #注释掉这部分,这是限制redis只能本地访问
protected-mode no #默认yes,开启保护模式,限制为本地访问
daemonize no#默认no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程,改为yes会使配置文件方式启动redis失败,因为该选项让redis成为在后台运行的守护进程,而docker容器必须要有一个前台进程才能留存。
databases 16 #数据库个数(可选)
dir  ./ #输入本地redis数据库存放文件夹(可选)
appendonly yes #开启aof,更好的持久化保证
# 5. 启动镜像
docker run -p 6379:6379 --name eh-redis \
-v /tmp/docker/redis:/etc/redis \
-v /tmp/docker/redis/data:/data \
-d redis \
redis-server /etc/redis/redis.conf
fa81f97cb89680bc05b878a81850cfec446422b6eab3513dce5614ab291df70e
# 6. 查看是否运行成功
$ docker ps
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
fa81f97cb896        redis               "docker-entrypoint.s…"   9 seconds ago       Up 7 seconds        0.0.0.0:6379->6379/tcp              eh-redis

# 7. 查看redis启动日志
$ docker logs fa
1:C 25 Oct 2020 13:36:32.915 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1:C 25 Oct 2020 13:36:32.915 # Redis version=6.0.8, bits=64, commit=00000000, modified=0, pid=1, just started
1:C 25 Oct 2020 13:36:32.915 # Configuration loaded
                _._
           _.-``__ ''-._
      _.-``    `.  `_.  ''-._           Redis 6.0.8 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 1
  `-._    `-._  `-./  _.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |           http://redis.io
  `-._    `-._`-.__.-'_.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |
  `-._    `-._`-.__.-'_.-'    _.-'
      `-._    `-.__.-'    _.-'
          `-._        _.-'
              `-.__.-'

1:M 25 Oct 2020 13:36:32.921 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
1:M 25 Oct 2020 13:36:32.921 # Server initialized
1:M 25 Oct 2020 13:36:32.928 * Ready to accept connections
# 8. 进入容器
$ de fa bash 或者 $ de eh-redis bash
root@fa81f97cb896:/data#

杂项

  • 测试redis在机器运行的性能

    bin/redis-benchmark

  • 单进程

    • 单进程模型来处理客户端的请求。对读写等事件的响应 是通过对epoll函数的包装来做到的。Redis的实际处理速度完全依靠主进程的执行效率
    • Epoll是Linux内核为处理大批量文件描述符而作了改进的epoll,是Linux下多路复用IO接口select/poll的增强版本, 它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。
  • 默认16个数据库,类似数组下表从零开始,初始默认使用零号库,可在配置文件配置

  • select命令切换数据库

  • dbsize查看当前数据库的key的数量

  • flushdb:清空当前库

  • flushall;通杀全部库

  • 统一密码管理,16个库都是同样密码,要么都OK要么一个也连接不上

  • Redis索引都是从零开始

  • 为什么默认端口是6379

    6379在是手机按键上MERZ对应的号码,而MERZ取自意大利歌女Alessia Merz的名字。MERZ长期以来被antirez及其朋友当作愚蠢的代名词。Redis作者antirez同学在twitter上说将在下一篇博文中向大家解释为什么他选择6379作为默认端口号。而现在这篇博文出炉,在解释了Redis的LRU机制之后,向大家解释了采用6379作为默认端口的原因。

  • 查看是否已启动

    1
    2
    3
    4
    
    # 方式一
    $ ps -ef | grep redis
    # 方式二
    $ lsof -i :6379