【Redis】redis简介与安装

Redis 简介

Redis 是完全开源的,遵守 BSD 协议(Berkeley Software Distribution 意思是"伯克利软件发行版),是一个高性能的 key-value 数据库。具有以下几个比较明显的特点:

  • 性能极高 -- Redis能读的速度可以达到110000次/s,写的速度可以达到81000次/s 。由此可以想到redis是将数据存储在内存中的。
  • 持久化 -- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  • 丰富的数据类型 -- Redis不仅仅支持简单的key-value类型的数据,同时还提供list、set、zset、hash、BitMap、GEO等数据结构的存储。
  • 支持主从备份 -- Redis支持数据的备份,即master-slave模式的数据备份。
  • 功能强大 -- 支持类MQ的发布订阅功能,支持Lua脚本,支持事务,支持pipeline
  • 原子性 -- Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
  • 丰富的特性 -- Redis还支持 publish/subscribe,通知,key 过期等等特性。

Redis与其他key-value存储区别

  • Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。

  • Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

Redis安装

redis的安装比较简单,我们以目前经常使用的centos7 为例进行安装,其他环境请自行测试。下面提供一个在centos7 上使用源码的方式安装redis 6.0.6版本的脚本。注意不同版本的安装可能有所差别,当然日常测试使用完全也可以使用yum的方式进行安装,可以参考另一篇博客https://blog.csdn.net/margu_168/article/details/133122869

bash 复制代码
[root@k8s-m2 ~]# cat  install_redis6.0.6.sh 
#!/bin/bash
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9 bash
cd /root
wget http://download.redis.io/releases/redis-6.0.6.tar.gz
tar xzf redis-6.0.6.tar.gz -C /usr/local
mv /usr/local/redis-6.0.6 /usr/local/redis
cd /usr/local/redis
make

# 日志目录在配置文件中暂未修改
# mkdir -p /data/redis/data/ && mkdir -p /data/redis/logs
##手动修改配置
mkdir /etc/redis
cp /usr/local/redis/redis.conf /etc/redis/redis.conf
#IP=`ip a|grep inet|grep eth0 |awk -F' |/' '{print $6}'`
sed -i 's/^bind 127.0.0.1/bind 0.0.0.0/g' /etc/redis/redis.conf
sed -i 's/^protected-mode yes/protected-mode no/g' /etc/redis/redis.conf
sed -i 's/^daemonize no/daemonize yes/g' /etc/redis/redis.conf
##添加启动文件

cat > /usr/lib/systemd/system/redis.service  <<EOF
[Unit]
Description=Redis
After=network.target


[Service]
Type=forking
PIDFile=/data/redis/logs/redis_6379.pid
ExecStart=/usr/local/redis/src/redis-server /etc/redis/redis.conf
ExecReload=/bin/kill -s HUP
ExecStop=/bin/kill -s QUIT
PrivateTmp=true


[Install]
WantedBy=multi-user.target

安装结束后,我们可以看到在/usr/local/redis/src/ 目录下有一些 关于 redis 可执行文件,大致说明如下:

名称 作用
redis-server 启动 redis 服务器
redis-cli redis 命令行客户端
redis-benchmark redis 性能测试工具
redis-check-aof AOF 文件修复工具
redis-check-dump RDB 文件检查工具
redis-sentinel Sentinel 服务器(2.8以后)

redis不同启动方式比较

redis 常见的有三种启动方式,分别如下。

最简单启动

直接使用命令行让redis在前台运行。

bash 复制代码
[root@k8s-m2 src]# ./redis-server 
8616:C 25 Feb 2024 16:46:16.723 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
8616:C 25 Feb 2024 16:46:16.723 # Redis version=6.2.6, bits=64, commit=00000000, modified=0, pid=8616, just started
8616:C 25 Feb 2024 16:46:16.723 # Warning: no config file specified, using the default config. In order to specify a config file use ./redis-server /path/to/redis.conf
8616:M 25 Feb 2024 16:46:16.725 * monotonic clock: POSIX clock_gettime
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 6.2.6 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                  
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 8616
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           https://redis.io       
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

8616:M 25 Feb 2024 16:46:16.726 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
8616:M 25 Feb 2024 16:46:16.726 # Server initialized
8616:M 25 Feb 2024 16:46:16.726 * Ready to accept connections

该启动方式将使用 redis 的默认配置。默认使用端口 6379 ,日志信息直接打印在屏幕上。缺点就是退出后redis服务(Ctrl+c)也就停止了。

动态参数启动

我们以指定端口号启动 redis为例,其他参数可以根据实际需要添加:

bash 复制代码
[root@k8s-m2 src]# ./redis-server --port 6389
14493:C 25 Feb 2024 16:50:50.212 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
14493:C 25 Feb 2024 16:50:50.212 # Redis version=6.2.6, bits=64, commit=00000000, modified=0, pid=14493, just started
14493:C 25 Feb 2024 16:50:50.212 # Configuration loaded
14493:M 25 Feb 2024 16:50:50.214 * monotonic clock: POSIX clock_gettime
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 6.2.6 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                  
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6389
 |    `-._   `._    /     _.-'    |     PID: 14493
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           https://redis.io       
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

14493:M 25 Feb 2024 16:50:50.215 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
14493:M 25 Feb 2024 16:50:50.215 # Server initialized
14493:M 25 Feb 2024 16:50:50.215 * Loading RDB produced by version 6.2.6
14493:M 25 Feb 2024 16:50:50.215 * RDB age 17 seconds
14493:M 25 Feb 2024 16:50:50.215 * RDB memory usage when created 0.77 Mb
14493:M 25 Feb 2024 16:50:50.215 # Done loading RDB, keys loaded: 0, keys expired: 0.
14493:M 25 Feb 2024 16:50:50.216 * DB loaded from disk: 0.000 seconds
14493:M 25 Feb 2024 16:50:50.216 * Ready to accept connections

同样的还是在前台打印出了日志信息,并且端口号变为了指定的 6389,覆盖了默认配置文件中的端口号。缺点还是退出后redis服务也就停止了。

验证:

bash 复制代码
[root@k8s-m2 src]# ./redis-cli -p 6389
127.0.0.1:6389> get *
(nil)
127.0.0.1:6389> 

配置文件启动

在日常的使用中,我们一般都是采用配置启动的方式,一方面是涉及到很多配置参数,其次通过命令行指定大量配置效率低,容易出错,长时间也不可能记得当初指定了哪些参数。所以推荐使用配置文件的方式来启动更好。

如上安装脚本所示:

习惯将配置文件放在/etc目录下,可以根据自己的习惯进行修改,在使用时指定实际目录即可。创建一个/etc/redis 目录,并 拷贝一个原始的redis.conf 文件到该目录。

bash 复制代码
mkdir /etc/redis
cp /usr/local/redis/redis.conf /etc/redis/redis.conf
# 修改了部分配置
sed -i 's/^bind 127.0.0.1/bind 0.0.0.0/g' /etc/redis/redis.conf
sed -i 's/^protected-mode yes/protected-mode no/g' /etc/redis/redis.conf
sed -i 's/^daemonize no/daemonize yes/g' /etc/redis/redis.conf

大家可以自行先查看一下配置文件中具体有哪些配置。使用下列命令启动 redis。

bash 复制代码
/usr/local/redis/src/redis-server /etc/redis/redis.conf 

可以看到控制台什么都没返回,说明 redis 以守护进程的方式启动了。

查看进程是否存在,并进行连接测试。

bash 复制代码
[root@k8s-m2 src]# ps aux|grep redis
root     31308  0.1  0.0 162588  2956 ?        Ssl  17:03   0:00 /usr/local/redis/src/redis-server 0.0.0.0:6379
root     32402  0.0  0.0 112816   968 pts/1    S+   17:04   0:00 grep --color=auto redis
[root@k8s-m2 src]# ./redis-cli 
127.0.0.1:6379> get *
(nil)

关闭 redis

以守护进程方式启动redis后,我们可以使用下列命令关闭:

bash 复制代码
# 通过ps查看到redis进场的pid号
[root@k8s-m2 src]# ps aux | grep redis
[root@k8s-m2 src]# kill -9 PID值
或
# 端口号是默认的可以不指定
[root@k8s-m2 src]# redis-cli -p port shutdown
相关推荐
阿里小阿希22 分钟前
CentOS7 PostgreSQL 9.2 升级到 15 完整教程
数据库·postgresql
荒川之神27 分钟前
Oracle 数据仓库雪花模型设计(完整实战方案)
数据库·数据仓库·oracle
做个文艺程序员38 分钟前
MySQL安全加固十大硬核操作
数据库·mysql·安全
不吃香菜学java1 小时前
Redis简单应用
数据库·spring boot·tomcat·maven
一个天蝎座 白勺 程序猿1 小时前
Apache IoTDB(15):IoTDB查询写回(INTO子句)深度解析——从语法到实战的ETL全链路指南
数据库·apache·etl·iotdb
不知名的老吴1 小时前
Redis的延迟瓶颈:TCP栈开销无法避免
数据库·redis·缓存
YOU OU1 小时前
三大范式和E-R图
数据库
一江寒逸1 小时前
零基础从入门到精通MySQL(上篇):筑基篇——吃透核心概念与基础操作,打通SQL入门第一关
数据库·sql·mysql
@土豆1 小时前
Ubuntu 22.04 运行 Filebeat 7.11.2 崩溃问题分析及解决文档
linux·数据库·ubuntu
专注API从业者1 小时前
淘宝商品详情 API 与爬虫技术的边界:合法接入与反爬策略的技术博弈
大数据·数据结构·数据库·爬虫