目录
一、概述
(一)NoSQL(非关系型数据库)类型
1、文档型数据库(Document-oriented database)如MongoDB;
2、列族数据库(Column-family database)如HBase、Cassandra等;
3、图形数据库(Graph database)如Neo4j、ArangoDB等;
4、键值对数据库(Key-value database)如Redis、Memcached等;
5、对象数据库(Object-oriented database)如db4o等。
(二)NoSQL(非关系型数据库)应用场景
1、缓存
2、分布式锁
3、计数器
4、会话管理
5、消息队列
(三)关系型数据库与非关系型数据库区别
1、数据存储结构:关系型数据库基于表格的结构来存储数据,每个表格包含多个行和列来存储数据,而非关系型数据库使用文档、键值或图形等不同的方式来存储数据。
2、数据查询语言:关系型数据库使用SQL作为数据查询语言,用户可以使用SQL来查询、过滤、排序等操作,而非关系型数据库则使用各种自定义的查询语言或API,通常不支持完整的SQL语言。
3、数据可扩展性:非关系型数据库通常具有更好的可扩展性,可以通过水平扩展来增加存储容量和处理能力,而关系型数据库的扩展很大程度上依赖于硬件的升级。
4、数据一致性:关系型数据库通常具有更好的一致性,数据更新和删除时需要满足一定的一致性规则和约束条件,从而确保数据的完整性和可靠性,而非关系型数据库则通常采用柔性事务(如最终一致性)来保证数据一致性。
(四)redis简介
二、编译安装
(一)下载:wget https://codeload.github.com/redis/redis/tar.gz/refs/tags/7.0.11
(二)解压文件
(三)筛选redis的主配置文件中没有注释的文件
(四)解析无注释的主配置文件参数
1、详解
2、简介
(五)编译安装
三、命令解析
(一)redis-server redis启动命令
(二)redis-cli redis登录命令
选项: -h redis服务器IP
-p 指定访问端口号
-a 指定登录密码
-n 指定数据库编号
(三)redis-check-rdb 检查RDB文件
(四)redis-check-aof 检查AOF文件
四、将命令前天进程改为后台进程,需修改配置文件
(一)vim /root/redis-7.0.11/redis.conf
(二)在命令模式下查找关键词daemonize
①/daemonize
②将daemonize no 改为 daemonize yes
③之后保存退出
④启动服务
⑤停止服务
四、数据库的操作
(一)登录数据库
1、监听回环地址 redis-cli
2、监听本地网卡地址 redis-cli -h IP -p 端口号
(二)帮助信息
1、help 命令字
2、tab补齐
(三)切换数据库 select 数据库编号
(四)数据操作
命令:set key value 2、keys
3、get 取出键值对
4、del 删除键值对
5、flushall 清空所有数据库中的数据
6、rename 重命名键名称
7、renamenx 重命名键名称
8、move 移动键值对到指定数据库
9、ttl 查看键值对的生命周期
10、Redis中设置键的生命周期有以下几个作用:
11、expire 设置键值对的存储周期
五、Redis持久化
(一)RDB模式
1、默认持久化
2、dump.rdb 数据库启动时会读取
3、触发条件
(二)AOF模式
1、默认关闭
2、appendonly.aof 默认进程启动时读取
3、开启
一、概述
(一)NoSQL(非关系型数据库)类型
1、文档型数据库(Document-oriented database)如MongoDB;
2、列族数据库(Column-family database)如HBase、Cassandra等;
3、图形数据库(Graph database)如Neo4j、ArangoDB等;
4、键值对数据库(Key-value database)如Redis、Memcached等;
5、对象数据库(Object-oriented database)如db4o等。
(二)NoSQL(非关系型数据库)应用场景
1、缓存
Redis最常用的应用场景就是缓存,它可以缓存各种类型的数据,如数据库查询结果、API返回结果等,以提高应用程序的响应速度和并发性能。
2、分布式锁
Redis的分布式锁可以确保在分布式系统中对某个资源的互斥访问,避免多个节点出现并发操作的问题。
3、计数器
Redis支持对计数器的操作,能够方便地实现各种计数器的功能,如网站访问次数计数、订单数量计数等。
4、会话管理
Redis可以用来管理会话信息,实现会话的状态存储和共享,避免了单点故障的问题。
5、消息队列
Redis支持发布订阅模式,可以作为一个轻量级的消息队列使用,实现异步消息处理和任务派发等功能。
(三)关系型数据库与非关系型数据库区别
1、数据存储结构:关系型数据库基于表格的结构来存储数据,每个表格包含多个行和列来存储数据,而非关系型数据库使用文档、键值或图形等不同的方式来存储数据。
2、数据查询语言:关系型数据库使用SQL作为数据查询语言,用户可以使用SQL来查询、过滤、排序等操作,而非关系型数据库则使用各种自定义的查询语言或API,通常不支持完整的SQL语言。
3、数据可扩展性:非关系型数据库通常具有更好的可扩展性,可以通过水平扩展来增加存储容量和处理能力,而关系型数据库的扩展很大程度上依赖于硬件的升级。
4、数据一致性:关系型数据库通常具有更好的一致性,数据更新和删除时需要满足一定的一致性规则和约束条件,从而确保数据的完整性和可靠性,而非关系型数据库则通常采用柔性事务(如最终一致性)来保证数据一致性。
(四)redis简介
Redis是一个开源、基于内存的数据结构存储系统。它可以用作数据库、缓存和消息中间件。它支持多种数据结构,如字符串、哈希表、列表、集合和有序集合等。Redis还支持事务、Lua脚本、消息订阅和发布等高级功能。
与传统的关系型数据库不同,Redis是一个NoSQL数据库,它使用键值对的形式存储数据。Redis是基于内存的,因此它的读写速度非常快。Redis还具有持久化功能,可以将数据持久化到磁盘上。
Redis也被广泛用作消息队列或者消息中间件。它支持发布-订阅模式,可以方便地将消息传递给订阅者。
Redis还支持多种语言的客户端,包括C、C++、Python、Java等,这使得它可以轻松地与不同的应用程序集成。
总之,Redis是一个功能强大的数据存储系统,它具有高性能、高可用性、灵活性和可靠性等特点,被广泛应用于Web、移动应用、游戏、实时分析等领域。
二、编译安装
(一)下载:wget https://codeload.github.com/redis/redis/tar.gz/refs/tags/7.0.11
(二)解压文件
(三)筛选redis的主配置文件中没有注释的文件
#grep -v '^#' redis.conf | grep -v '^$'(由于该文件注释信息较多,因此使用该命令)
这个命令是用来读取Redis服务器配置文件redis.conf中的有效配置选项(即去掉了注释和空行)。解释一下命令的各个部分:
- grep:是一个强大的文本搜索工具
- -v:表示不匹配(反向匹配),也就是过滤掉符合条件的行
- '^#':表示以#开头的行,即注释行
- '^$':表示空行
因此,执行这条命令可以过滤掉redis.conf中的注释行和空行,只返回有效的配置选项。
(四)解析无注释的主配置文件参数
1、详解
bind 127.0.0.1 # 绑定的IP地址,默认为本地回环地址
port 6379 # 端口号,默认为6379
tcp-backlog 511 # TCP backlog参数,处理客户端连接队列的长度
requirepass foobared # Redis密码,默认为空密码
timeout 0 # 客户端超时时间,0表示不限制客户端超时时间
tcp-keepalive 300 # TCP keepalive参数,长连接用于减少重新连接的开销
daemonize no # 是否以守护进程方式运行,默认为no
supervised no # 是否通过systemd等管理工具来管理进程,默认为no
pidfile /var/run/redis_6379.pid # PID文件路径
loglevel notice # 日志级别,可选参数有:debug、verbose、notice、warning
logfile "" # 日志文件路径,默认在标准输出中输出日志
databases 16 # 数据库数量,默认为16个
always-show-logo yes # 是否展示Redis的Logo,默认为yes
save 900 1 # 自动快照的保存策略,900表示在900秒后保存,1表示至少有1个修改操作
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes # 是否停止写入操作,当Redis因为在后台保存快照的时候发生错误时
rdbcompression yes # 是否开启RDB文件的压缩
rdbchecksum yes # 是否启用RDB文件的校验和
dbfilename dump.rdb # RDB文件名
dir /var/lib/redis # RDB自动快照和AOF文件目录位置
slave-serve-stale-data yes # 当实例作为从服务器下线时,是否继续响应读请求
slave-read-only yes # 是否启动只读模式,即从节点无法执行写操作
repl-diskless-sync no # 从节点是否执行磁盘同步
repl-diskless-sync-delay 5 # 磁盘同步延迟时间
replica-ignore-max-connections no # 是否忽略最大连接数限制
slave-priority 100 # 是否启用主从同步优先级,默认为100
lazyfree-lazy-eviction no # 是否开启lazyfree懒惰空间释放
lazyfree-lazy-expire no # 是否开启lazyfree懒惰过期键清除
lazyfree-lazy-server-del no # 是否开启lazyfree懒惰过期键清除
latency-monitor-threshold 0 # 是否开启Redis延迟监控,0表示禁用,单位为微秒
notify-keyspace-events "" # 通知机制,指定事件通知的类型,如:KEA、ME或E
min-slaves-to-write 0 # 主节点持久化数据时,从节点的最小个数
min-slaves-max-lag 10 # 从节点的最大复制延迟时间
hz 10 # 定期执行的定时任务
maxmemory 0 # 最大使用内存量,默认为0,表示不限制使用内存的大小
maxmemory-policy noeviction # 内存达到最大限制时采用的策略,如:noeviction、allkeys-lru、volatile-lru
maxmemory-samples 5 # maxmemory-policy策略中的样本个数
appendonly no # 是否开启AOF持久化
appendfilename "appendonly.aof" # AOF文件名
appendfsync everysec # AOF操作的同步方式,如:always、everysec、no
no-appendfsync-on-rewrite no # AOF重写的时候是否暂停AOF持久化
auto-aof-rewrite-percentage 100 # 重写AOF文件的阈值
auto-aof-rewrite-min-size 64mb # 重写AOF文件的最小尺寸
aof-load-truncated yes # 加载前一个AOF文件的数据是否截断后续的AOF文件数据
aof-use-rdb-preamble no # 写入AOF文件时,是否添加RDB文件的文件头
aof-rewrite-incremental-fsync yes # AOF重写是否使用增量的同步方式
2、简介
1. bind:绑定的IP地址,如果你的机器有多个IP地址,可以指定一个或多个
2. protected-mode:保护模式,指定为yes时,只允许本地连接,不允许外部访问
3. port:Redis服务器监听的端口号
4. tcp-backlog:TCP服务器的listen()函数的backlog参数,默认128
5. timeout:客户端连接的超时时间,单位为秒
6. tcp-keepalive:是否开启长连接保活功能
7. daemonize:是否以守护进程方式运行Redis服务器
8. pidfile:以守护进程方式运行时,保存进程号的文件名
9. loglevel:日志记录的级别,共有4个级别:debug、verbose、notice、warning
10. logfile:日志文件名
11. databases:Redis服务器的数据库个数,默认16个
12. save:保存的条件,可设置多个,如:save 900 1,表示在900秒内,如果有1个key发生改变,就会触发一次持久化操作
13. stop-writes-on-bgsave-error:在后台进行持久化操作时,如果出错,是否停止写入操作
14. rdbcompression:是否对备份文件进行压缩
15. dbfilename:备份文件名
16. dir:备份及临时文件存放目录
17. slaveof:指定主Redis服务器的地址和端口号,使当前Redis服务器成为主Redis服务器的从服务器
18. masterauth:主Redis服务器的密码,从服务器连接主服务器时需要使用的密码
19. requirepass:设置连接Redis服务器时需要使用的密码
20. maxclients:Redis服务器所能接受客户端连接的最大数量
21. maxmemory:Redis服务器可用的最大内存
22. appendonly:是否开启AOF持久化操作
23. appendfilename:AOF文件名
24. appendfsync:设置AOF缓冲区刷入磁盘的时机,共有3个选项:
- always:每次有数据修改时都会写入AOF文件
- everysec:每秒钟写入AOF文件一次
- no:完全依赖于操作系统的缓存机制来写入磁盘
25. auto-aof-rewrite-percentage:当AOF文件大小达到上次重写时大小的百分之多少时,触发AOF文件重写操作
26. auto-aof-rewrite-min-size:触发AOF文件重写操作的最小大小
27. hash-max-ziplist-entries:哈希对象压缩时,能转换为ziplist(压缩列表)格式压缩的最大元素个数
28. hash-max-ziplist-value:哈希对象压缩时,能转换为ziplist格式压缩的最大元素值大小
29. list-max-ziplist-entries:列表对象压缩时,能转换为ziplist格式压缩的最大元素个数
30. list-max-ziplist-value:列表对象压缩时,能转换为ziplist格式压缩的最大元素值大小
31. set-max-intset-entries:集合对象压缩时,能转换为intset(整数集合)格式压缩的最大元素个数
32. zset-max-ziplist-entries:有序集合对象压缩时,能转换为ziplist格式压缩的最大元素个数
33. zset-max-ziplist-value:有序集合对象压缩时,能转换为ziplist格式压缩的最大元素值大小
34. activerehashing:是否开启哈希表的rehash操作
35. client-output-buffer-limit:控制客户端输出缓冲区的大小,可以设置多个,如:
client-output-buffer-limit normal 0 0 0:表示不限制
client-output-buffer-limit slave 256mb 64mb 60:表示从服务器的输出缓冲区最大为256MB,超出64MB时,就开始写入到磁盘中,每60秒检查一次输出缓冲区大小
client-output-buffer-limit pubsub 32mb 8mb 60:表示发布订阅模式下的输出缓冲区大小限制,超过32MB时,数据会被写入磁盘
(五)编译安装
#由于redis-7.0.11目录下有Makefile文件,而且该目录下不存在配置命令,因此不需要配置,直接编译就可以了
#注意:在编译的时候可能会出现下面的错误
#这个错误提示是因为你的系统找不到 Python3以及未找到 cc
命令,cc 等价于GCC编译器,通常它是在 C 程序编译时使用的。
解决办法:yum -y install python3 gcc*
make distclean 清空上次编译失败残留文件
#注意:必须清空后在编译及安装,否则会报如下错误
make && make install 执行编译及安装
#有的编译安装redis的其他版本需要优化命令路径,但此版本不用。
优化命令路径:ln -s /root/redis-7.0.11/src/redis-server /usr/local/bin/
ln -s /root/redis-7.0.11/src/redis-cli /usr/local/bin/
三、命令解析
(一)redis-server redis启动命令
(二)redis-cli redis登录命令
选项: -h redis服务器IP
-p 指定访问端口号
-a 指定登录密码
-n 指定数据库编号
(三)redis-check-rdb 检查RDB文件
(四)redis-check-aof 检查AOF文件
四、将命令前天进程改为后台进程,需修改配置文件
(一)vim /root/redis-7.0.11/redis.conf
(二)在命令模式下查找关键词daemonize
①/daemonize
②将daemonize no 改为 daemonize yes
③之后保存退出
#注意:启动服务时,要指定配置文件,要不然不读
④启动服务
redis-server redis.conf
#启动该服务时得在redis-7.0.11目录下
⑤停止服务
netstat -anptu | grep :6379
kill PID号
四、数据库的操作
(一)登录数据库
本地登录:
1、监听回环地址 redis-cli
2、监听本地网卡地址 redis-cli -h IP -p 端口号
(二)帮助信息
1、help 命令字
2、tab补齐
(三)切换数据库 select 数据库编号
(四)数据操作
1、set 设置键值对
命令:set key value
2、keys
命令:①keys * 查看所有键的名称
②keys 键名称 查看一个键是否存在
3、get 取出键值对
命令:get 键 #键不存在则返回空
4、del 删除键值对
命令:del key
5、flushall 清空所有数据库中的数据
6、rename 重命名键名称
#不论更名后的键是否存在都会覆盖原有键,并将改名前的键的值赋予改名后的键
命令:rename oldkey newkey
7、renamenx 重命名键名称
#假如改名后键名称存在则更改不成功
命令:renamenx oldkey newkey
8、move 移动键值对到指定数据库
#假如目标数据库中存在同名键则移动失败
命令:move key dbnumber
9、ttl 查看键值对的生命周期
命令:ttl key ①-1 永久 ②-2 已过期
10、Redis中设置键的生命周期有以下几个作用:
①节省内存:如果一个键的生命周期结束(过期),Redis会自动删除它,这样可以释放占用的内存,从而保证Redis不会长时间运行导致内存耗尽造成宕机风险。
②进一步保证缓存数据的正确性:生命周期设置可以让缓存数据有一个过时时间,从而让Redis中的数据更加符合缓存的实际需求,在一段时间内保证数据的正确性,而不是一直缓存下去导致数据的过时和不准确。
③防止缓存雪崩:在大量缓存同时失效时,会发生缓存雪崩,导致请求直接到达数据库或其他层,造成系统崩溃。通过设置不同的过期时间使得缓存的过期时间分散,可以在缓存雪崩时分散请求,短时间内缓存失效对系统的冲击不会太大,防止系统崩溃。
Redis设置键的生命周期可以提高缓存的效率和可靠性,减少系统崩溃和资源浪费的风险。
11、expire 设置键值对的存储周期
命令:expire key seconds
五、Redis持久化
类型:
(一)RDB模式
1、默认持久化
2、dump.rdb 数据库启动时会读取
3、触发条件
①redis进程退出 宕机 redis程序崩溃
②手动保存(触发RDB) save
(二)AOF模式
1、默认关闭
2、appendonly.aof 默认进程启动时读取
3、开启
appendonly yes 可以与RDB同时使用