Redis 入门

一、概述

1.1 什么是 Redis

        RedisRemote DIctionary Server(远程字典服务器)。

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

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

        a、Redis 支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。

        b、Redis 不仅仅支持简单的 key-value 类型的数据,同时还提供 listsetzsethash 等数据结构的存储。

        c、Redis 支持数据的备份,即 master-slave 模式的数据备份。

1.2 Redis 能干什么

        内存存储和持久化redis 支持异步将内存中的数据写到硬盘上,同时不影响继续服务取最新 N 个数据的操作,如:可以将最新的 10 条评论的 ID 放在 Redis List 集合里面

        发布、订阅消息系统

        地图信息分析

        定时器、计数器

二、Windows 安装

2.1 下载

        微软的 github 的地址在这,选择最新版本即可,如下图所示:

Redis 入门_第1张图片

2.2 解压

Redis 入门_第2张图片

2.3 启动

        首先启动 redis-cli ,然后再启动 redis-server ,双击启动就可以。

Redis 入门_第3张图片

Redis 入门_第4张图片

2.4 设置开机自启

        虽然上面启动了 redis 服务,但是只要关闭了 cmd 窗口,redis 服务就会消失。所以这个时候就需要把 redis 设置成 windows 下的服务。

        左下角开始菜单--服务--进入服务的菜单,此时未发现 redis 的服务。

Redis 入门_第5张图片

        打开 cmd 命令窗口,切换到 redis 的安装目录下,输入以下命令:

redis-server --service-install redis.windows-service.conf --loglevel verbose

        未报任何错误信息,说明服务设置成功。

Redis 入门_第6张图片

        刷新服务,可以看到新增加的 redis 服务

Redis 入门_第7张图片

2.5 注意事项

        当把 redis 服务放到 windows 的服务下后,这个 redis 服务就会随着你的电脑开机自动启动,此时无需再启动 server 端,直接启动客户端就可以进行操作。

2.6 设置密码

        在安装目录下找到 redis.windows-service.conf

Redis 入门_第8张图片

        修改配置文件,添加密码设置

Redis 入门_第9张图片

         重启服务即可

Redis 入门_第10张图片

        测试是否成功

Redis 入门_第11张图片

2.7 重要提示

        由于企业里面做 Redis 开发,99% 都是 Linux 版的运用和安装,几乎不会涉及到 Windows 版,上面只是为了知识的完整性,Windows 版不作为重点,大家可以自己玩,企业实战就认一个版:Linux 版。

三、Linux 安装

3.1 下载

        下载地址在这里,下载最新版本的即可

Redis 入门_第12张图片

3.2 安装

3.2.1 文件拷贝

        将下载获得的 redis-7.2.0.tar.gz 文件复制到我们 Linux 环境的 /opt 目录下

3.2.2 解压

        进入到 /opt 目录下,执行解压命令,命令如下所示:

cd /opt

tar -zxvf redis-7.2.0.tar.gz

3.2.3 编译

        解压完成后会出现 redis-7.0.2 文件夹,进入该文件夹,执行 make 命令

cd redis-7.0.2
make

3.2.4 安装

        继续执行 make install 命令

Redis 入门_第13张图片

3.2.5 查看安装情况

        进入到 /usr/local/bin 目录下,查看是否生成了 redis 的相关文件,/usr 这是一个非常重要的目录,类似于 windows 下的 Program Files,存放用户的程序。

3.2.6 拷贝配置文件

        将 redis.conf 文件复制到我们的指定目录下,以后我们的启动就用这个配置文件

cd /usr/local/bin

mkdir myredis

cp /opt/redis /myredis

Redis 入门_第14张图片

3.2.7 配置守护线程

        redis.conf 配置文件中 daemonize 守护线程,默认是 NO

vim redis.conf

        daemonize 是用来指定 redis 是否要用守护线程的方式启动。 配置成 yes 之后我们就不用再启动 redis 的服务端了。

        redis 采用的是单进程多线程的模式。当 redis.conf 中选项 daemonize 设置成 yes 时,代表开启守护进程模式。在该模式下,redis 会在后台运行,并将进程 pid 号写入至 redis.conf 选项 pidfile 设置的文件中,此时 redis 将一直运行,除非手动 kill 该进程。

        当 daemonize 选项设置成 no 时,当前界面将进入 redis 的命令行界面,exit 强制退出或者关闭连接工具 (puttyxshell 等)都会导致 redis 进程退出。

3.2.8 启动测试

[root@localhost bin]# pwd
/usr/local/bin

# 启动 redis 服务
[root@localhost bin]# redis-server myredis/redis.conf 
3464:C 20 Aug 2023 23:38:12.608 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.

#  redis 客户端连接
[root@localhost bin]# redis-cli -p 6379
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> set name zhangsan
OK
127.0.0.1:6379> get name
"zhangsan"
127.0.0.1:6379> exit

# 显示系统当前的进程信息
[root@localhost bin]# ps -ef| grep redis
root       3465      1  0 23:38 ?        00:00:00 redis-server 127.0.0.1:6379
root       3625   2983  0 23:48 pts/0    00:00:00 grep --color=auto redis

# 再次连接客户端
[root@localhost bin]# redis-cli -p 6379

# 关闭连接
127.0.0.1:6379> shutdown
not connected> exit

# 再次查看系统当前的进程信息
[root@localhost bin]# ps -ef| grep redis
root       3660   2983  0 23:48 pts/0    00:00:00 grep --color=auto redis
[root@localhost bin]# 

四、Redis-benchmark

        Redis-benchmark 是官方自带的 Redis 性能测试工具,可以有效的测试 Redis 服务的性能。

4.1 可选参数

        redis 性能测试工具可选参数如下所示:

Redis 入门_第15张图片

4.2 启动测试

        首先启动 redis 的服务端和客户端

Redis 入门_第16张图片

# 100 个并发连接,100000 个请求,检测 host 为 localhost,端口为 6379 的 redis 服务器性能
[root@localhost ~]# redis-benchmark -h localhost -p 6379 -c 100 -n 100000

# 测试出来的所有命令只举例一个!
====== PING_INLINE ======                                                     
  100000 requests completed in 0.92 seconds          # 对集合写入测试
  100 parallel clients                               # 每次请求有100个并发客户端
  3 bytes payload                                    # 每次写入3个字节的数据,有效载荷
  keep alive: 1                                      # 保持一个连接,一台服务器来处理这些请求
  host configuration "save": 3600 1 300 100 60 10000
  host configuration "appendonly": no
  multi-thread: no

Latency by percentile distribution:
0.000% <= 0.119 milliseconds (cumulative count 1)
50.000% <= 0.455 milliseconds (cumulative count 50297)
75.000% <= 0.503 milliseconds (cumulative count 76551)
87.500% <= 0.567 milliseconds (cumulative count 88416)
93.750% <= 0.655 milliseconds (cumulative count 93981)
96.875% <= 0.751 milliseconds (cumulative count 97010)
98.438% <= 0.855 milliseconds (cumulative count 98506)
99.219% <= 0.943 milliseconds (cumulative count 99234)
99.609% <= 1.031 milliseconds (cumulative count 99625)
99.805% <= 1.191 milliseconds (cumulative count 99807)
99.902% <= 1.391 milliseconds (cumulative count 99904)
99.951% <= 1.447 milliseconds (cumulative count 99954)
99.976% <= 1.527 milliseconds (cumulative count 99979)
99.988% <= 1.543 milliseconds (cumulative count 99988)
99.994% <= 1.559 milliseconds (cumulative count 99994)
99.997% <= 1.583 milliseconds (cumulative count 99997)
99.998% <= 1.607 milliseconds (cumulative count 99999)
99.999% <= 1.615 milliseconds (cumulative count 100000)
100.000% <= 1.615 milliseconds (cumulative count 100000)  # 所有请求在 1.615 毫秒内完成

五、基础知识

5.1 默认数据库数量

        redis 默认拥有 16 个数据库,类似数组下标从零开始,初始默认使用零号库,查看 redis.conf 配置文件即可发现

5.2 数据库切换

        使用 select 命令进行数据库的切换,不同的库可以存储不同的数据

5.3 查看 key 数量

        使用 dbsize 命令可以查看当前数据库的 key 的数量,keys * 命令可以查看当前数据库所有的 key

Redis 入门_第17张图片

5.4 清空数据

        使用 flushdb 命令可以清空当前库,使用 flushall 命令清空全部的库。

Redis 入门_第18张图片

5.5 为什么redis是单线程

       我们首先要明白,Redis 很快!官方表示,因为 Redis 是基于内存的操作,CPU 不是 Redis 的瓶颈,Redis 的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且 CPU 不会成为瓶颈,那就顺理成章地采用单线程的方案了!( 在 redis6.0 版本之前,redis 都是单线程的)

        Redis 采用的是基于内存的单进程单线程模型的 KV 数据库,由 C 语言编写,官方提供的数据是可以达到 100000+QPS(每秒内查询次数)。这个数据不比采用单进程多线程的同样基于内存的 KV 数据库 Memcached 差!

5.6 Redis为什么这么快

        以前一直有个误区:高性能服务器 一定是多线程来实现的,原因很简单因为另外一个误区导致的:多线程 一定比单线程效率高。其实不然,在说这个事前希望大家都能对 CPU 、 内存 、 硬盘的速度都有了解了!

        redis 核心是如果数据全都在内存里,单线程去操作效率就是最高的,为什么呢?因为多线程的本质就是 CPU 模拟出来多个线程的情况,这种模拟出来的情况就有一个代价,就是上下文的切换,对于一个内存的系统来说,它没有上下文的切换就是效率最高的。redis 用 单个 CPU 绑定一块内存的数据,然后针对这块内存的数据进行多次读写的时候,都是在一个 CPU 上完成的,所以它是单线程处理这个事。在内存的情况下,这个方案就是最佳方案。

        一次 CPU 上下文的切换大概在 1500ns 左右。redis 从内存中读取 1MB 的连续数据,耗时大约为 250us。假设 1MB 的数据由多个线程读取了 1000 次,那么就有 1000 次时间上下文的切换,那么就有 1500ns *1000 = 1500us ,我单线程的读完 1MB 数据才 250us ,你光时间上下文的切换就用了 1500us 了,还不算你每次读一点数据的时间。

你可能感兴趣的:(redis,redis)