Redis单机部署

Redis单机部署

为什么使用redis

​ 平常在项目中设计客户端访问数据库数据时往往采用直连方式访问数据库,也有采用数据库连接池技术来实现访问,但是我们要清楚,当以万次的访问量同时涌入我们数据库,或者频繁的操作数据库,将会对我们的数据库造成很大的压力;
  为了解决这一问题,早些年前Memcached(缓存数据库)脱颖而出,Memcached它是一个非关系型数据库(NoSQL),这个数据库在项目中可以起到缓存作用,把一些经常使用的数据加载到缓存数据库中,防止了每次请求都往最终数据库查询数据;
  后来Memcached随着时代的进步,Redis(NoSQL)数据库慢慢取代了它,成为新时代的霸主,Redis不仅可以存储简单的key-value类型,还有各式各样的方法类型,而且还可以持久化;所以它慢慢的以内存缓存的形式应用到大型企业项目中;

在这里插入图片描述

注:C/S/D = controller/server/dao

  • 单机数据库问题:如果数据量太大导致一台服务器放不下了那么多数据的存储;访问量大幅增加导致数据库无法支撑

单机数据库转变为集群数据库来解决问题

  • 集群数据库问题:网站一般都是以读为目录,虽是读写分离,大大提高性能,但是大量的读操作(读取相同数据)也会影响性能

集群数据库转变为集群数据库+缓存数据库

一般如电商网站有10W+个用户同时或者间接查看此热门商品,没有缓存数据库的支持的话,我这用户全部去请求MySQL数据库,这样会造成极大压力,但是我们有了高性能的内存缓存服务器,当第一个用户去服务器请求热门商品时,就把此商品保存在缓存服务器上(也可提前保存),这样每次请求直接走缓存数据库上即可,这就是我下面要介绍的缓存数据库(Redis)每秒可并发可达10W/s

在 CentOS 7 上部署 Redis 单机实例

在本教程中,我们将学习如何在 CentOS 7 操作系统上部署一个单机 Redis 实例,用于存储和管理数据。Redis 是一个开源的内存数据库,广泛用于缓存、会话存储和实时分析等用途。

redis 安装包下载: https://redis.io/download        # 一般都是下载稳定版--stable
redis 官网:https://redis.io/



redis各稳定版本特性(更新到6.0版本)
========================
||     5.Redis4.0     ||
========================
可能出乎很多的意料,Redis3.2之后的版本是4.0,而不是3.4、3.6、3.8。
一般这种重大版本号的升级也意味着软件或者工具本身发生了重大改革。

下面是Redis4.0的新特性:
1)提供了模块系统,方便第三方开发者拓展Redis的功能。
2)PSYNC2.0:优化了之前版本中,主从节点切换必然引起全量复制的问题。
3)提供了新的缓存剔除算法:LFU(Last Frequently Used),并对已有算法进行了优化。
4)提供了非阻塞del和flushall/flushdb功能,有效解决删除了bigkey可能造成的Redis阻塞。
5)提供了memory命令,实现对内存更为全面的监控统计。
6)提供了交互数据库功能,实现Redis内部数据库的数据置换。
7)提供了RDB-AOF混合持久化格式,充分利用了AOF和RDB各自优势。
8)Redis Cluster 兼容NAT和Docker。



========================
||     6.Redis5.0     ||
========================
1)新的Stream数据类型。
2)新的Redis模块API:Timers and Cluster API。
3)RDB现在存储LFU和LRU信息。
4)集群管理器从Ruby(redis-trib.rb)移植到C代码。可以在redis-cli中。查看redis-cli —cluster help了解更多信息。
5)新sorted set命令:ZPOPMIN / MAX和阻塞变量。
6)主动碎片整理V2。
7)增强HyperLogLog实现。
8)更好的内存统计报告。
9)许多带有子命令的命令现在都有一个HELP子命令。
10)客户经常连接和断开连接时性能更好。
11)错误修复和改进。
12)Jemalloc升级到5.1版



========================
||     7.Redis6.0    ||
========================
1)提供了众多的新模块(modules)API
2)提供了客户端缓存功能
3)多线程 I/O 能力
4)提升了 RDB 日志的加载速度

准备工作

  • 登录到 CentOS 7 服务器(可以是虚拟机或云服务器)。
  • redis安装包
  • 确保具有 root 或 sudo 权限。

安装 Redis

1.1解压tar包:
[root@HAN ~]# tar -zxvf redis-5.0.14.tar.gz 
1.2安装依赖环境
  • 因为Redis底层是C语言写的,需要安装gcc进行编译 ,以及安装autoconf和automake
[root@HAN ~]# yum -y install gcc-c++ autoconf automake
..............
依赖关系解决

=========================================================================================================
 Package                       架构               版本                          源                  大小
=========================================================================================================
正在安装:
 autoconf                      noarch             2.69-11.el7                   centos             701 k
 automake                      noarch             1.13.4-3.el7                  centos             679 k
 gcc-c++                       x86_64             4.8.5-44.el7                  centos             7.2 M
为依赖而安装:
 cpp                           x86_64             4.8.5-44.el7                  centos             5.9 M
 gcc                           x86_64             4.8.5-44.el7                  centos              16 M
 glibc-devel                   x86_64             2.17-317.el7                  centos             1.1 M
 glibc-headers                 x86_64             2.17-317.el7                  centos             690 k
 kernel-headers                x86_64             3.10.0-1160.el7               centos             9.0 M
 libmpc                        x86_64             1.0.1-3.el7                   centos              51 k
 libstdc++-devel               x86_64             4.8.5-44.el7                  centos             1.5 M
 m4                            x86_64             1.4.16-10.el7                 centos             256 k
 mpfr                          x86_64             3.1.1-4.el7                   centos             203 k
 perl-Data-Dumper              x86_64             2.145-3.el7                   centos              47 k
 perl-Test-Harness             noarch             3.28-3.el7                    centos             302 k
 perl-Thread-Queue             noarch             3.02-2.el7                    centos              17 k

事务概要
=========================================================================================================
安装  3 软件包 (+12 依赖软件包)
.................
已安装:
  autoconf.noarch 0:2.69-11.el7     automake.noarch 0:1.13.4-3.el7     gcc-c++.x86_64 0:4.8.5-44.el7    

作为依赖被安装:
  cpp.x86_64 0:4.8.5-44.el7                            gcc.x86_64 0:4.8.5-44.el7                         
  glibc-devel.x86_64 0:2.17-317.el7                    glibc-headers.x86_64 0:2.17-317.el7               
  kernel-headers.x86_64 0:3.10.0-1160.el7              libmpc.x86_64 0:1.0.1-3.el7                       
  libstdc++-devel.x86_64 0:4.8.5-44.el7                m4.x86_64 0:1.4.16-10.el7                         
  mpfr.x86_64 0:3.1.1-4.el7                            perl-Data-Dumper.x86_64 0:2.145-3.el7             
  perl-Test-Harness.noarch 0:3.28-3.el7                perl-Thread-Queue.noarch 0:3.02-2.el7             

完毕!

1.3开始编译安装
[root@redis redis-5.0.14]# cd redis-5.0.14/
[root@redis redis-5.0.14]# make  &&  make  install 
cd src && make install
make[1]: 进入目录“/root/redis-5.0.14/src”
    CC Makefile.dep
make[1]: 离开目录“/root/redis-5.0.14/src”
make[1]: 进入目录“/root/redis-5.0.14/src”

Hint: It's a good idea to run 'make test' ;)

    INSTALL install
    INSTALL install
    INSTALL install
    INSTALL install
    INSTALL install
make[1]: 离开目录“/root/redis-5.0.14/src”       #最后看到这些信息说明成功
1.4启动redis

测试是否正确安装

[root@HAN redis-5.0.14]# cd /usr/local/bin
[root@HAN bin]# redis-server 
16110:C 18 Aug 2023 10:08:33.469 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
16110:C 18 Aug 2023 10:08:33.469 # Redis version=5.0.14, bits=64, commit=00000000, modified=0, pid=16110, just started
16110:C 18 Aug 2023 10:08:33.469 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
16110:M 18 Aug 2023 10:08:33.470 * Increased maximum number of open files to 10032 (it was originally set to 1024).
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 5.0.14 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 16110
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

16110:M 18 Aug 2023 10:08:33.472 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
16110:M 18 Aug 2023 10:08:33.472 # Server initialized
16110:M 18 Aug 2023 10:08:33.472 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. 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.
16110:M 18 Aug 2023 10:08:33.472 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
16110:M 18 Aug 2023 10:08:33.472 * Ready to accept connections

#看到图标正确启动
#需要ctrl+退出,不然会一直在这个页面
^C16110:signal-handler (1692324579) Received SIGINT scheduling shutdown...
16110:M 18 Aug 2023 10:09:39.889 # User requested shutdown...
16110:M 18 Aug 2023 10:09:39.889 * Saving the final RDB snapshot before exiting.
16110:M 18 Aug 2023 10:09:39.892 * DB saved on disk
16110:M 18 Aug 2023 10:09:39.893 # Redis is now ready to exit, bye bye...

在这里插入图片描述

1.5文件解释
[root@HAN bin]# ls
dump.rdb  redis-benchmark  redis-check-aof  redis-check-rdb  redis-cli  redis-sentinel  redis-server


1、redis-benchmark 性能测试工具
2、redis-check-aof AOF文件修复工具
3、redis-check-rdb RDB文件修复工具
4、redis-cli 客户端命令行
5、redis-sentinal 集群管理工具
6、redis-server 服务进程指令 // 启动redis,执行Ctrl + C就会停止服务

配置 Redis

2.1redis的配置文件
cp /root/redis-5.0.14/redis.conf /usr/local/bin/
2.2打开 Redis 配置文件:
[root@HAN bin]# vim /usr/local/bin/redis.conf 
136 daemonize
默认情况下,redis不是在后台运行的,如果需要在后台运行,把该项值改成yes。

69 bind
指定Redis只接收来自于该IP地址的请求。 (0.0.0.0 代表任意IP可访问,127.0.0.1 只可本地服务器可访问)

92 port
监听端口,默认为 6379

186 databases
设置数据库的个数,默认使用数据库为 16218 save
设置Redis进行数据库镜像的频率

253 dbfilename
镜像备份文件的文件名

263 dir
数据库镜像备份的文件放置的路径

507 requirepass
设置密码访问 设置客户端连接后进行任何其他执行需要的使用的密码。

539 maxclients
限制同时连接的客户数量。

566 maxmemory
设置redis能够使用的最大内存。

修改配置(以下是一些常用配置示例):

  • 如果需要从远程访问,注释掉 bind 127.0.0.1 行。
  • 如果需要设置密码,找到 # requirepass foobared 并修改密码。
  • 调整其他配置如端口号、数据持久化等。
2.3修改之后执行配置文件方式
[root@HAN bin]# /usr/local/bin/redis-server /usr/local/bin/redis.conf 
16331:C 18 Aug 2023 10:24:50.402 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
16331:C 18 Aug 2023 10:24:50.402 # Redis version=5.0.14, bits=64, commit=00000000, modified=0, pid=16331, just started
16331:C 18 Aug 2023 10:24:50.402 # Configuration loaded

测试 Redis 连接

3.1使用 Redis 客户端连接到 Redis 服务器:
[root@HAN bin]# redis-cli 
127.0.0.1:6379> 
127.0.0.1:6379> ping
PONG

运行一些基本命令测试连接,如 SET key valueGET key

退出 Redis 客户端:

exit

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0jsCqbIz-1692325858071)(C:\Users\35306\AppData\Roaming\Typora\typora-user-images\image-20230818102916760.png)]

进一步配置和维护

  • 如果需要持久化数据,可以配置 RDB 快照和 AOF 日志。
  • 考虑设置防火墙规则,允许访问 Redis 端口。

redis性能测试

性能测试工具 redis-benchmark

Usage: redis-benchmark [-h <host>] [-p <port>] [-c <clients>] [-n <requests>] [-k <boolean>]

-h <hostname>      设置redis服务端 IP (default 127.0.0.1)   
-p <port>          设置redis服务端 端口 (default 6379)
-a <password>      设置redis服务端 密码
-c <clients>       设置多少个redis客户端并发连接redis服务端 (default 50)
-d <size>          设置每次SET/GET值的数据大小,默认3字节 “VXK” (default 3)
-n <requests>      设置请求总数,若默认50个客户端,每个客户端只需要请求2000次 (default 100000)
-q                 只显示每种类型测试 读/写 的秒数(不会输出大片测试过程)
-l                 闭环模式,测试完后,循环上一次测试,(就是命令永远循环)
-r <keyspacelen>   设置指定数量的键;对SET/GET/INCR使用随机键,对SADD使用随机值,ZADD的随机成员和分数。
                    注:-r会被应用到key和counter键,并且拼接12位后缀标识为多少个;如 "key:000000000008" 代表生成的第八个键
-P <numreq>        选项代表每个请求pipeline的数据量. Default 1 (no pipeline).
-t <tests>         设置选择性的测试操作,它只会对我们指定的命令测试 如 -t SET,SPOP,LPUSH (低版本只能测试17个命令)            注:看下面的性能测试方式,选择其中指定方式测试
-I                 空闲模式。只需打开N个空闲连接并等待
-s <socket>        Server socket (覆盖主机和端口)
-k <boolean>       1=保持活动状态 0=重新连接 (default 1)
                    注:默认测试是一旦第一次连接,后面就不会断开,直到测试完成,
                    注:若是 1 则代表每次请求完成则断开连接,下次请求再重新连接
                    
--csv              以CSV格式输出,方便我们统计Excel等处理
--user <username>  用于发送ACL样式的“验证用户名密码”。需要 -a。
--dbnum <db>       选择指定的数据库号进行测试,redis默认数据库为(0~16) (default 0)
--threads <num>    启动多线程模式来测试
--cluster          启用集群模式来测试
--enable-tracking  启动测试之前发送客户端跟踪
--help             帮助文档
--version          显示版本号

默认方式

如果未指定 -t xxx,xxx,... 则从头至尾20个性能测试方案依次进行
(1) PING_INLINE 
(2) PING_MBULK 
(3) SET:将字符串值value关联到key; 
(4) GET:返回key所关联的字符串值,如果key存储的值不是字符串类型,返回一个错误; 
(5) INCR:将key中存储的数字值增一。不能转换为数字则报错; 
(6) LPUSH:将一个或多个值value插入到列表key的表头; 
(7) RPUSH:将一个或多个值value插入到列表key的表尾; 
(8) LPOP:移除并返回列表key的头元素; 
(9) RPOP:移除并返回列表key的尾元素; 
(10) SADD:将一个或多个member元素加入到集合set当中,已经存在于集合的member元素将被忽略; 
(11) HSET:将字符串值value关联到hash里的key中
(12) SPOP:移除并返回集合中的一个随机元素; 
(13) ZADD:测试sortedSet有序集合的添加时间性能
(14) ZPOPMIN:测试sortedSet有序集合,删除多个值并把删除的值排序,从小到大
(15) LPUSH:将一个或多个value插入到列表key的表头; 
(16) LRANGE_100:返回列表key中指定区间内的元素,前100条元素; 
(17) LRANGE_300:返回列表key中指定区间内的元素,前300条元素; 
(18) LRANGE_500:返回列表key中指定区间内的元素,前500条元素; 
(19) LRANGE_600:返回列表key中指定区间内的元素,前600条元素; 
(20) MSET:同时设置一个或多个key-value对,value为字符串。

如果未指定 -r 则以下面的四个键来测试
redis-benchmark性能测试默认情况下只会以如下类型key来测试(低版本应该是三个)
1) "myhash"
    此类型为“hash”,每次请求则会向“hash”key为 “element:__rand_int__” 添加“VXK”,后者覆盖前者
2) "counter:__rand_int__"
    此类型为“string”,每次请求则会累加 1 ,后个请求会对前一个值+1操作
3) "key:__rand_int__"
    此类型为“string”,每次请求则会存放“VXK”,后个请求覆盖上一个值
4) "mylist"
    此类型为“list”,往集合内部存储“VXK”,每请求一次则插入一次

常用测试方案

1:连接redis服务器并测试以50个客户端并发(平分每个客户端2000次)访问100000次
  ./redis-benchmark -h 127.0.0.1 -p 6379 -c 50 -n 100000 
2:不输出测试过程,只显示当前测试案例结束的时间
  ./redis-benchmark -h 127.0.0.1 -p 6379 -c 50 -n 100000 -q
3:总和上面,并设置每个请求的请求值的大小字节
  ./redis-benchmark -h 127.0.0.1 -p 6379 -c 50 -n 100000 -q -d 5
4:综合上面,并设置指定的测试案例
  ./redis-benchmark -h 127.0.0.1 -p 6379 -c 50 -n 100000 -q -d 5 -t SET,SADD,ZADD,GET

测试输出的格式说明:(以 SET 测试案例说明)
./redis-benchmark -h 127.0.0.1 -p 6379 -c 1000 -n 1000000 -t SET 
====== SET ======                                                     
  1000000 requests completed in 18.75 seconds
    -- 1000000 请求用时 18.751000 parallel clients
    -- 每个客户端请求次数1000
  3 bytes payload
    -- 每次测试请求字节大小为 3byte
  keep alive: 1
    -- 保持活力模式 1 一直连接 (0则代表每次请求从新连接)
  host configuration "save": 3600 1 300 100 60 10000
  host configuration "appendonly": no
    -- 上面两个主机配置 持久化方式关闭 
  multi-thread: no
    -- 不是多线程测试

Latency by percentile distribution:
0.000% <= 6.159 milliseconds (cumulative count 1)
50.000% <= 13.191 milliseconds (cumulative count 500348)
75.000% <= 15.687 milliseconds (cumulative count 750168)
98.438% <= 26.799 milliseconds (cumulative count 984415)
100.000% <= 49.151 milliseconds (cumulative count 1000000)
100.000% <= 49.151 milliseconds (cumulative count 1000000)

Cumulative distribution of latencies:
0.000% <= 0.103 milliseconds (cumulative count 0)
1.234% <= 7.103 milliseconds (cumulative count 12338)
12.473% <= 9.103 milliseconds (cumulative count 124733)
49.156% <= 13.103 milliseconds (cumulative count 491559)
100.000% <= 48.127 milliseconds (cumulative count 999999)
100.000% <= 50.111 milliseconds (cumulative count 1000000)

Summary:
  throughput summary: 53339.02 requests per second
    -- 吞吐量摘要:每秒53339.02个请求
  latency summary (msec):
    --延迟摘要(毫秒)
          avg       min       p50       p95       p99       max
       13.639     6.152    13.191    21.663    28.351    49.151

其它参数介绍

-P <numreq> 
  在上面的性能测试中,每个客户端都是在一个请求完成之后才发送下一个请求,如指定-c 50 -n 10000
则服务器几乎是按照顺序依次读取每个客户端的请求
  Redis 支持 /topics/pipelining;就是说Redis可以一次性执行多条命令(把命令打包一次性发送服务器)
所以Redis pipelining 可以提高服务器的 TPS。
  总结:减少网络的请求,把请求汇总处理
./redis-benchmark -c 20 -n 1000000 -t set,get -P 16 -q 

总结

恭喜你!你已经成功地在 CentOS 7 上部署了一个 Redis 单机实例。Redis 可以用于多种用途,如缓存、会话存储和数据分析。如果你对 Redis 有更多的兴趣,可以继续探索官方文档和更高级的配置选项。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值