20人参与 • 2025-10-09 • Redis
数据库按照数据库的结构可以分为关系型数据库与其他数据库,而这些其他数据库我们将其统称为非关系型数据库。
(1) 关系型数据库
关系型数据库是一个结构化的数据库,创建在关系模型基础上,一般面向于记录。它借助于集合代数等数学概念和方法来处理数据库中的数据。关系模型就是指二维表格模型,因而一个关系型数据库就是由二维表及其之间的联系组成的一个数据组织。现实世界中,各种实体与实体之间的各种联系都可以用关系模型来表示。sql 语句(标准数据查询语言)就是一种基于关系型数据库的语言,用于执行对关系型数据库中数据的检索和操作。
(2) 非关系型数据库
nosql(nosql = not 0nly sql),意思是“不仅仅是 sql”,是非关系型数据库的总称。主流的 nosql 数据库有 redis、mongbd、hbase、couhdb 等等。以上这些非关系型数据库,他们的存储方式、存储结构以及使用的场景都是完全不同的。所以我们认为它是一个非关系型数据库的集合,而不是像关系型数据库一样,是一个统称。换言之,除了主流的关系型数据库以外的数据库,都可以认为是非关系型的。nosql 数据库凭借着其非关系型、分布式、开源及横向扩展等优势,被认为是下一代数据库产品。
redis (remotedictionaryserver,远程字典型)是一个开源的、使用c语言编写的 nosql 数据库。redis 基于内存运行并支持持久化,采用 key-value(键值对)的存储形式,是目前分布式架构中不可或缺的一环。
redis 服务器程序是单进程模型,也就是再一台服务器上可以同时启动多个 redis 进程,而 redis 的时间处理速度则是完全依靠与主进程的执行效率。若再服务器上只运行一个 redis 进程,当多个客户端访问的时,服务器的处理能力是会有一定程度的下降;若再同一太服务器上开启多个 redis 进程,redis 在提高并发处理能力的同时会给服务器的 cpu 造成很大压力。即:在实际生产环境中,需要根据实际的需求来决定开启多少个redis 进程。若对高并发要求更高一些,可能会考虑在同一台服务器上开启多个进程。若 cpu 资源比较紧张,采用单进程即可。
redis 具有以下几个优点:
redis 作为基于内存运行的数据库,缓存是其最常应用的场景之一。除此之外,redis常见应用场景还包括获取最新 n个数据的操作、排行榜类应用、计数器应用、存储关系、实时分析系统、日志记录。
redis 的安装相对于其他服务来说比较简单 。首先需要到 redis 官网(https://www.redis.io)下载相应的源码软件包,然后上传至 linux 系统的服务器中进行解压、安装。本文以 redis-4.0.9.tar.gz 为例进行 redis 服务的安装和配置。
通常情况下,在 linux 系统中进行源码编译安装,需要先执行./configure进行环境检查与配置,从而生成 makefile 文件,再执行 make && make install命令进行编译安装。而 redis 源码包中直接提供了 makefile 文件,所以在解压完软件包后,可直接进入解压后的软件包目录,执行make与 make insta11命令进行安装。
dnf -y install tar gcc zlib-devel tar xvzf redis-4.0.9. tar.gz tar xvzf redis-4.0.9. tar.gz cd redis-4.0.9/ make && make prefix=/usr/local/redis install ln-s /usr/local/redis/bin/* /usr/local/bin/
make insta11 只是安装了二进制文件到系统中,并没有启动脚本和配置文件。
软件包中默认提供了一个 install server.sh 脚本文件,通过该脚本文件可以设置 redis 服务所需要的相关配置文件。
当脚本运行完毕,redis 服务就已经启动,默认侦听端口为 6379。
cd utils/ ./install server.sh /etc/init.d/redis 6379 start
redis 主配置文件为/etc/redis/6379.conf,由注释行与设置行两部分组成。与大多数 linux 配置文件一样,注释性的文字以“#”开始,包含了对相关配置内容进行的说明和解释。
除了注释行与空行以外的内容即为设置行。
可根据生产环境的需求调整相关参数,如下:
vim /etc/redis/6379.conf bind 127.0.0.1 192.168.10.161 //监听的主机地址 port 6379 //端日 daemonize yes //启用守护进程 pidfile /var/run/redis 6379.pid //指定 pid 文件 loglevel notice //日志级别 logfile /var/log/redis 6379.1og //指定日志文件
redis 软件提供了多个命令工具。安装 redis 服务时,所包含的软件工具会同时被安装到系统中,在系统中可以直接使用。
这些命令工具的作用分别如下所示:
redis 数据库系统也是一个典型的 c/s(客户端/服务器端)架构的应用,要访问 redis 数据库需要使用专门的客户端软件。
redis 服务的客户端软件就是其自带的 redis-cli 命令行工具。
使用 redis-cli 连接指定数据库,连接成功后会进入提示符为“远程主机 ip 地址:端口号>”的数据库操作环境.
redis-benchmark 是官方自带的 redis 性能测试工具,可以有效的测试redis 服务的性能。
基本的测试语法为 redis-benchmark[option] [optionvalue]。
常用选项如下所示:
前面提到 redis 数据库采用 key-value(键值对)的数据存储形式。
所使用的命令是 set与 get 命令。
在 redis 数据库中,与 key 相关的命令主要包含以下几种。
(1) keys
用于查找和模式匹配的键
keys * # 查看所有键 keys user:* # 查看以user:开头的键
(2) exists
检查键是否存在
set name "alice" # 设置键值 exists name # 返回1(存在) exists age # 返回0(不存在)
(3) del
删除一个或多个键
set a 1 set b 2 # 设置两个键 del a b # 删除两个键,返回2(成功删除的数量)
(4) type
获取键的数据类型
set num 100 # 设置字符串 type num # 返回string lpush list 1 2 # 创建列表 type list # 返回list
(5) rename
重命名键
set msg "hello" # 设置键值 rename msg greeting # 重命名键 get greeting # 返回"hello"
(6) renamenx
仅在新键不存在时重命名
set old "value" # 设置旧键 set new "other" # 设置新键 renamenx old new # 返回0(新键已存在) del new # 删除新键 renamenx old new # 返回1(重命名成功)
(7) dbsize
查看当前数据库的键总数
dbsize # 返回当前数据库的键数量
| 维度 | rdb(快照持久化) | aof(日志持久化) |
| 持久化方式 | 定时生成数据库快照文件(.rdb),保存某一时刻的全量数据。 | 记录所有写操作命令日志,以追加方式写入文件(.aof)。 |
| 数据安全性 | 可能丢失最后一次快照到故障期间的数据(取决于快照间隔)。 | 可配置每秒同步(最多丢失 1 秒数据)或实时同步,数据更安全。 |
| 文件大小 | 快照文件紧凑,占用空间小。 | 日志文件可能较大(需定期重写)。 |
| 恢复速度 | 加载快照速度快,适合大规模数据恢复。 | 重放日志速度较慢,尤其是日志文件很大时。 |
| 对性能影响 | 快照生成时可能有短暂阻塞(fork 子进程)。 | 持续写入日志对性能影响较小(取决于同步策略)。 |
优点:
缺点:
优点:
appendfsync always实时同步,几乎不丢数据。缺点:
appendfsync always会降低写入性能(每次写操作都同步磁盘)。rdb 配置在redis.conf中,核心参数:
# 快照触发条件:900秒内至少1个键变更,或300秒内至少10个键变更,或60秒内至少10000个键变更 save 900 1 save 300 10 save 60 10000 # 禁用rdb(注释掉所有save配置) # save "" # rdb文件名和存储目录 dbfilename dump.rdb dir /var/lib/redis/
开启 aof 并配置同步策略:
# 启用aof appendonly yes # aof同步策略: # always:每次写操作都同步磁盘(性能最低,数据最安全) # everysec:每秒同步一次(默认,推荐) # no:由操作系统决定(性能最高,数据可能丢失最多) appendfsync everysec # 当aof文件大小超过上次重写后体积的100%时触发自动重写 auto-aof-rewrite-percentage 100 # 当aof文件至少达到64mb时才触发自动重写 auto-aof-rewrite-min-size 64mb
bgrewriteaof命令。自动触发:满足auto-aof-rewrite-percentage和auto-aof-rewrite-min-size配置。info memory命令查看mem_fragmentation_ratio(理想值 1.0~1.5)。malloc_profile)或更换分配器(如 tcmalloc)。compress命令)。hash结构(hset user:1 name "alice")比 100 万个字符串键更省空间。当数据包含多个字段时,用hash代替多个独立字符串键:
# 推荐方式(节省内存) hset user:1 name "alice" age 25 city "beijing" # 不推荐方式(每个字段一个键) set user:1:name "alice" set user:1:age "25" set user:1:city "beijing"
expire key seconds),避免无用数据长期占用内存。过期策略:
内存淘汰策略(当内存不足时):
volatile-lru:从设置过期时间的键中删除最久未使用的。allkeys-lru:从所有键中删除最久未使用的(推荐常用场景)。volatile-random:随机删除设置过期时间的键。noeviction:拒绝写入操作(默认策略,需手动配置为其他策略)。配置方式:
redis.conf中设置maxmemory-policy allkeys-lru。以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论