目录
更多关于Redis相关技术点,敬请关注公众号:CTO Plus后续的发文,有问题欢迎后台留言交流。
Redis(Remote Dictionary Server)是一个开源的内存数据结构存储系统,具有高性能、低延迟、可扩展和灵活的特点,常用作数据库、缓存和消息中间件,被广泛应用于各种场景。
将通过公众号CTO Plus的【Redis进阶】系列文章的学习,读者将逐步掌握Redis的基本操作和高级技巧,能够独立设计和优化数据存储方案,提升系统的性能和可靠性。同时,读者还将了解到Redis的一些高级特性和扩展,为实际项目的开发和部署提供更多的选择和灵活性。这一系列将还会介绍到比如Redis的高并发缓存架构、结合Python、Node.js、Go等语言的应用程序开发等。
那么,本文我将介绍Redis的基本概念、特点和特性、应用场景和用途、SQL和NoSQL、安装和配置,以及一个可视化的图形客户端的分享。下一篇我将分享Redis的数据类型和常用命令、配置文件redis.con等内容,帮助读者快速入门Redis。详情请关注公众号CTO Plus后续的文章。
Redis的9大基本概念和特点
1. 键值存储:Redis使用键值对的方式存储数据,每个键都是唯一的,每个键对应一个值。键和值都可以是字符串、哈希表、列表、集合、有序集合等类型。这种简单的数据结构使得Redis能够快速读取和写入数据。
2. 高性能(内存数据库):Redis将数据存储在内存中,由于内存的读写速度远远高于磁盘,因此具有极高的读写性能。它使用了一些高效的数据结构和算法,如哈希表和跳跃表,以实现快速的数据访问和操作,可以在微秒级别完成数据操作。此外,Redis还支持多线程和异步IO等技术,进一步提升了性能和响应速度。同时,Redis还支持将数据异步写入磁盘,以保证数据的持久化。
3. 单线程模型:Redis采用单线程模型,即所有的请求都由一个线程处理,这个线程通过异步IO和多路复用技术来处理并发请求。这种单线程模型使得Redis能够处理大量的并发请求,同时保证数据的一致性。
4. 发布/订阅模式:Redis支持发布/订阅模式,可以实现消息的发布和订阅。可以将消息发布给多个订阅者,实现实时消息推送和广播功能。发布者将消息发布到指定的频道,而订阅者可以订阅一个或多个频道,接收发布者发送的消息,实现实时通信和事件驱动。
5. 事务支持:Redis支持事务操作,可以将多个命令打包在一起执行,保证这些命令的原子性。在事务中,可以使用MULTI命令开启事务,然后使用EXEC命令执行事务,或者使用DISCARD命令取消事务。
6. 高可用性(分布式):支持分布式架构,可以将数据分布到多个节点上,实现数据的水平扩展和负载均衡。Redis提供了多种高可用性方案,如主从复制、哨兵模式和集群模式。主从复制可以实现数据的备份和读写分离,可以将数据复制到多个从节点上,实现数据的备份和高可用性。哨兵模式可以监控节点的状态和自动切换主节点,实现故障恢复和负载均衡,当主节点故障时自动将从节点升级为主节点。集群模式可以将数据分布在多个节点上,实现数据的分片和扩展,提供更高的性能和可靠性。
7. 数据结构多样性:Redis支持多种数据结构,如字符串、哈希、列表、集合和有序集合等。每种数据结构都有其独特的特点和用途,可以满足各种不同的数据管理需求。例如,字符串可以用于存储用户信息和配置信息,哈希可以用于存储商品信息和用户评论,列表可以用于实现消息队列和日志记录,集合和有序集合可以用于实现排行榜和推荐系统等。
8. 持久化:Redis支持数据持久化,可以将内存中的数据保存到磁盘上,以防止数据丢失。它提供了两种持久化方式:RDB(Redis Database)和AOF(Append Only File),即快照(snapshotting)和日志(logging)。快照方式将数据以二进制格式保存到磁盘上,日志方式将数据以文本格式保存到日志文件中。通过持久化,Redis可以在重启后恢复数据,并提供数据的备份和恢复功能,可以根据需求选择适合的方式。
9. 其他特性:Redis可以作为缓存系统使用,提供快速的数据访问和响应。它支持设置过期时间、LRU(Least Recently Used)淘汰策略和缓存预热等功能,可以有效减轻数据库的负载。
后面的文章将一一对这些特性做详细介绍,包括Redis的高级特性,并结合代码示例做实战讲解,详情请关注公众号CTO Plus后续的文章。
Redis的7种应用场景和用途
Redis被广泛应用于各种场景和行业,接下来介绍下Redis的一些使用场景:
作为缓存系统:Redis最常见的应用场景就是作为缓存系统使用,用于缓存热点数据和减轻后端数据库的压力。它可以将常用的数据存储在内存中,提供快速的数据访问和响应。由于其高性能和可扩展性,Redis能够提供快速的数据访问和响应,提升应用程序的性能和用户体验。通过设置过期时间和LRU淘汰策略,可以有效减轻数据库的负载。
分布式锁:Redis可以实现分布式锁,用于控制多个进程或线程对共享资源的访问。通过使用Redis的原子操作和过期时间设置,Redis能够提供可靠的分布式锁,避免资源竞争和数据冲突,从而实现安全的分布式锁机制。
计数器和排行榜:Redis的原子操作和有序集合功能可以实现计数器和排行榜功能。它可以对计数器进行增减操作,并根据分数对元素进行排序,实现实时的统计和排名。
会话管理:Redis可以用于存储和管理用户会话信息,例如登录状态和购物车信息等。它可以将用户的登录状态和会话数据存储在内存中,提供快速的会话访问和管理。由于其高性能和持久化功能,Redis能够提供可靠的会话管理,确保用户数据的安全性和一致性。通过设置过期时间和定时刷新机制,可以实现会话的自动管理。
消息队列:Redis的发布订阅功能可以实现简单的消息队列。它可以将消息发布到指定的频道,订阅者可以接收并处理这些消息,实现实时通信和事件驱动。
计数器和排行榜:Redis支持原子操作和有序集合等特性,可以用于实现计数器和排行榜功能。例如,可以使用Redis的原子操作实现并发安全的计数器,用于统计网站的访问量和用户活跃度。可以使用Redis的有序集合实现排行榜,用于展示热门商品和热门文章等。
实时消息:Redis支持发布-订阅模式,可以用于实现实时消息系统。发布者将消息发布到指定的频道上,订阅者订阅感兴趣的频道,接收并处理消息。由于其高性能和异步IO特性,Redis能够提供快速和可靠的实时消息传递。
在公众号CTO Plus前面的文章中也分别对关系型和非关系型数据库做了简单的介绍,以及Redis的特点和应用场景的介绍,详情可以在文末点击查看相应文章。这里我们再简单概述下这两种数据库的优缺点。
关系型(SQL)和非关系型(NoSQL)数据库
接下来我们将详细介绍关系型数据库和非关系型数据库的特点以及它们适用的场景,并且比较它们之间的异同点。关系型和非关系型数据库是两种不同的数据库系统,它们各自有着不同的优缺点和适用场景。
关系型数据库
关系型数据库:MySQL、Oracle、SQL Server、PostgreSQL、SQLite等;
关系型数据库(RDBMS)是最早被广泛使用的数据库类型之一,它主要是基于关系模型来构建数据结构。基于关系模型,关系型数据库将数据存储在一张二维表格中,每个表格有行和列组成,其中每行代表一个实体或记录,每列代表一种属性或特性。
常见的关系型数据库系统有MySQL、Oracle、SQL Server等。这些数据库系统都有着严格的结构和一致的架构,以确保数据始终保持一致性和完整性。
优点
1. 数据完整性和一致性高:关系型数据库使用严格的结构和一致的约束来确保数据被正确地保存和管理。
2. 筛选和操作数据方便:关系型数据库使用SQL查询语言来操作数据,因此筛选和操作数据非常方便。
3. 可靠性高:由于其可靠性和数据完整性高,关系型数据库在经济、金融、医疗等行业中得到了广泛应用。
缺点
1. 非常难扩展:由于其严格的数据结构和架构,关系型数据库通常很难进行扩展。这就使得在长期发展和快速增长情况下的数据量变得很难管理。
2. 性能较差:由于其具有的复杂和严格的结构,关系型数据库通常处理非常大的数据时性能较差。
非关系型数据库
非关系型数据库:MongoDB、Redis、Elasticsearch、influxDB、HBase等。
非关系型数据库(NoSQL)是一类不同于关系型数据库的数据库系统。它是构建在分布式系统上的,不使用关系模型,而是使用其他数据存储模型来组织数据。这些存储模型包括键值存储、文档存储、列式存储、图形数据库等。
非关系型数据库还可以采用分布式架构,使得其在高并发性、扩展性和容错率等方面具有优势。
优点
1. 可扩展性高:在非关系型数据库中,数据通常以分布式方式存储,这使得它们具有更好的可扩展性和适应性,无需对存储数据的位置进行任何限制。
2. 处理非结构化数据方便:非关系型数据库能够存储和管理非结构化数据,比如文本和视频,这是关系型数据库不擅长处理的部分。
3. 高效性:由于非关系型数据库不使用关系模型,这使得它们处理大量的数据时比关系型数据库更加高效。
缺点
1. 数据一致性难以维护:非关系型数据库通常不强制执行任何数据一致性规定,使得难以维护数据一致性。
2. 限制查询方式:非关系型数据库查询数据的方式有限,与关系型数据库相比,其查询功能较弱。
更多关于Redis相关技术点,敬请关注公众号:CTO Plus后续的发文,有问题欢迎后台留言交流。
Redis的服务安装
接下来介绍下Redis服务的安装,Redis可以在Windows、Linux、MacOS系统上安装和使用。
下载Redis
首先,我们需要从Redis官方网站(https://redis.io/)下载最新版本的Redis,然后按照官方文档进行安装。根据操作系统的不同,选择相应的安装包进行下载。
Linux上安装Redis
1. 先安装依赖
自 redis 6.0.0 之后,编译 redis 需要支持 C11 特性,C11 特性在 4.9 中被引入。Centos7 默认 gcc 版本为 4.8.5,所以需要升级gcc版本(redis make server.c报错)
安装最新的高版本,请先检查gcc的版本是否低于5,如果是请先升级,可以使用以下命令:
#安装C依赖
yum -y install gcc gcc-c++ make tcl
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9 bash
yum install centos-release-scl devtoolset-7-gcc*
scl enable devtoolset-7 bash
yum install gcc gcc-c++ automake pcre pcre-devel zlip zlib-devel openssl openssl-devel
$ make MALLOC=libc #编译
tcl的下载安装也可以使用源码方式安装:
wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz
tar -xzvf tcl8.6.1-src.tar.gz
cd /usr/local/tcl8.6.1/unix/
./configure
make && make install
2. 解压Redis
wget http://download.redis.io/redis-stable.tar.gz#下载稳定版本
下载完成后,将压缩包解压到指定的目录。可以使用以下命令解压:
tar zxvf redis-stable.tar.gz #解压
3. 进入Redis目录
解压完成后,进入解压后的Redis目录:
cd redis-stable
4. 编译和安装Redis
进入Redis目录后,执行以下命令进行编译和安装:
make
make install
编译和安装完成后,Redis就安装在了系统中。
也可以指定目录进行安装
make PREFIX=/opt/server/redis install #指定目录编译
make install
选择安装路径
make && make test && make install PREFIX=/usr/local/redis
make MALLOC=libc &&make test && make install PREFIX=/usr/local/redis
5. 建立配置目录
Redis的配置文件为redis.conf,可以通过修改配置文件来配置Redis的各种参数,如端口、密码、持久化方式等。
mkdir /etc/redis
cp redis.conf /etc/redis/6379.conf # 拷贝配置文件
cp utils/redis_init_script /etc/init.d/redis #拷贝init启动脚本针对6.X系统
chmod a+x/etc/init.d/redis #添加执行权限
或者拷贝文件如下:
拷贝配置文件
cp redis.conf /usr/local/redis/
修改文件权限
chmod -R 700 /usr/local/redis
修改配置文件,进行相应的配置,以下是一些常用的配置项:
vi /etc/redis/6379.conf
bind 0.0.0.0 #监听地址
maxmemory 4294967296 #限制最大内存(4G) 或 8gb #内存大小限制
daemonize yes #设置守护进程允许后台运行
protected-mode no
requirepass uLlRa*3go&0gxzn% #设置访问密码
port 端口 #端口
参数释义:
-
bind:绑定的IP地址,默认为127.0.0.1,表示只能本地访问。如果想要远程访问,可以将其设置为0.0.0.0。
-
port:监听的端口号,默认为6379。
-
daemonize:是否以守护进程方式运行,默认为no,可以修改为yes。
-
logfile:日志文件路径,默认为标准输出,可以修改为指定的文件路径。
-
dir:数据存储目录,默认为当前目录,可以修改为指定的目录。
根据具体的需求,修改相应的配置项。
更详细的参数释义可以关注公众号CTO Plus后面的文章《Redis配置文件详解》
更多关于Redis相关技术点,敬请关注公众号:CTO Plus后续的发文,有问题欢迎后台留言交流。
6. 启动与停止
在终端中执行以下命令启动Redis:
redis-server /usr/local/redis/redis.conf
如果配置文件路径不是默认的/usr/local/redis/redis.conf,需要将路径修改为实际的配置文件路径。
服务的方式启动和停止
/etc/init.d/redis start
/etc/init.d/redis stop
Windows上安装Redis
Windows上的Redis安装非常简单,只需要下载好二进制包软件,解压后直接指定配置文件启动即可
启动服务
redis-server.exe redis.windows.conf
安装成服务
redis-server.exe --service-install redis.windows.conf
Redis使用:
-
卸载服务:redis-server --service-uninstall
-
开启服务:redis-server --service-start
-
停止服务:redis-server --service-stop
检查服务是否正常,可以通过set命令来验证,关于set命令以及其他的命令详细使用介绍,我将在公众号CTO Plus后面的文章中做详细介绍。
检查Redis是否启动成功
执行以下命令检查Redis是否成功启动:
$ redis-cli ping
如果返回pong,表示Redis已成功启动,服务正常。
查看版本信息
输入命令info
127.0.0.1:6379> info
能够输出以下信息就代表Redis服务安装正常
# Server
redis_version:7.0.5
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:e01333ecb488d7ad
redis_mode:standalone
os:MSYS_NT-10.0-22000 3.3.4-341.x86_64 x86_64
arch_bits:64
monotonic_clock:POSIX clock_gettime
multiplexing_api:select
atomicvar_api:c11-builtin
gcc_version:11.2.0
process_id:797
process_supervised:no
run_id:a7696a91d5048162e037d77ea32ca9b8018062fc
tcp_port:6379
server_time_usec:1693592293181365
更多关于Redis相关技术点,敬请关注公众号:CTO Plus后续的发文,有问题欢迎后台留言交流。
Redis的图形化管理工具(可视化客户端)
我推荐使用的Redis图形化客户端可以使用RESP GUI for Redis来操作Redis
总结
Redis是一个高性能、低延迟和高可扩展性的内存数据存储系统,具有键值存储、持久化、高可用性和分布式缓存等特性。它可以应用于各种场景,如缓存系统、分布式锁、计数器和排行榜、会话管理和消息队列等。通过使用Redis,可以提高系统的性能、可靠性和扩展性。
本文介绍了Redis的基本概念、安装和配置过程。通过下载、解压、编译和安装,我们可以将Redis安装在系统中。然后,通过创建配置文件并修改相应的配置项,可以对Redis进行配置。最后,我们可以使用Redis提供的命令行工具redis-cli来进行操作。通过合理的配置和使用,我们可以充分发挥Redis的高性能和可靠性,满足不同业务需求的数据存储和处理需求。
参考资料
-
官方网站:https://redis.io
-
Redis使用手册:https://redis.io/docs/getting-started/
-
Redis CLI工具:https://redis.io/docs/ui/cli/
-
Redis Clients API指南:https://redis.io/docs/clients/
-
Redis GitHub:https://github.com/redis/redis
-
Windows Redis下载地址https://github.com/MSOpenTech/redis/releases
更多精彩,关注我公号,一起学习、成长
CTO Plus
一个有深度和广度的技术圈,技术总结、分享与交流,我们一起学习。 涉及网络安全、C/C++、Python、Go、大前端、云原生、SRE、SDL、DevSecOps、数据库、中间件、FPGA、架构设计等大厂技术。 每天早上8点10分准时发文。
306篇原创内容
公众号
Redis进阶推荐阅读:
-
Redis进阶:Redis入门指南-概念、特点、应用场景以及Windows/Linux下的安装和使用
-
Redis进阶:使用Redis命令行界面进行数据库连接和基本操作
-
Redis进阶:配置文件的配置项和使用详解
-
Redis进阶:redis生产环境启动方案,以及通过客户端远程连接服务
-
Redis进阶:存储和访问基本数据结构-字符串,以及应用场景
-
Redis进阶:存储和访问基本数据结构-哈希(hash),以及应用场景
-
Redis进阶:存储和访问基本数据结构-列表,以及应用场景
-
Redis进阶:存储和访问基本数据结构-集合,以及应用场景
-
Redis进阶:存储和访问基本数据结构-有序集合,以及应用场景
-
Redis进阶:Redis的19个高级特性总结清单介绍
-
非关系型数据库:MongoDB、redis、memcached之间的关系以及对比
-
Redis进阶:使用缓存的17大误区经验总结
-
Redis进阶:命令使用总结