Redis基础以及相关知识点

目录

一、概述

(一)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同时使用

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值