【Redis初阶】初识、特性和安装 📅 2026/7/16 8:59:08 目录一、初识Redis1.1 Redis特性1.2 Redis 使⽤场景1.2.1 Redis可以做什么1.2.2 Redis 不可以做什么1.3 安装并启动Redis1.3.1 在Ubuntu上面安装Redis1.3.2 控制 Redis 启动1.3.3 Redis重要文件及其作用1.4 Redis 命令行客户端一、初识Redis本篇文章带你们走进redis的世界了解它的前世今生众多特性应用场景、安装配置、如何用。1.1 Redis特性速度快。正常情况下Redis 执⾏命令的速度⾮常快官⽅给出的数字是读写性能可以达到 10 万 / 秒当然这也取决于机器的性能但这⾥先不讨论机器性能上的差异只分析⼀下是什么造就了 Redis 如此之快可以⼤概归纳为以下四点Redis 的所有数据都是存放在内存中的所以把数据放在内存中是 Redis 速度快的最主要原因。Redis 是⽤ C 语⾔实现的⼀般来说 C 语⾔实现的程序 “距离” 操作系统更近执⾏速度相对会更快。Redis 使⽤了单线程预防了多线程可能产⽣的竞争问题。基于键值对的数据结构服务器⼏乎所有的编程语⾔都提供了类似字典的功能例如 C ⾥的 map、Java ⾥的 map、Python ⾥的 dict 等类似于这种组织数据的⽅式叫做基于键值对的⽅式与很多键值对数据库不同的是Redis 中的值不仅可以是字符串⽽且还可以是具体的数据结构这样不仅能便于在许多应⽤场景的开发同时也能提⾼开发效率。Redis 的全程是 REmote Dictionary Server它主要提供了 5 种数据结构字符串string、哈希hash、列表list、集合set、有序集合ordered set /zet同时在字符串的基础之上演变出了位图Bitmaps和 HyperLogLog 两种神奇的 ”数据结构“并且随着 LBSLocation Based Service基于位置服务的不断发展Redis 3.2. 版本种加⼊有关 GEO地理信息定位的功能总之在这些数据结构的帮助下开发者可以开发出各种 “有意思” 的应⽤。丰富的功能除了 5 种数据结构Redis 还提供了许多额外的功能提供了键过期功能可以⽤来实现缓存。提供了发布订阅功能可以⽤来实现消息系统。⽀持 Lua 脚本功能可以利⽤ Lua 创造出新的 Redis 命令。提供了简单的事务功能能在⼀定程度上保证事务特性。提供了流⽔线Pipeline功能这样客⼾端能将⼀批命令⼀次性传到 Redis减少了⽹络的开销。简单稳定Redis 的简单主要表现在三个⽅⾯。⾸先Redis 的源码很少早期版本的代码只有 2 万⾏左右3.0 版本以后由于添加了集群特性代码增⾄ 5 万⾏左右相对于很多 NoSQL 数据库来说代码量相对要少很多也就意味着普通的开发和运维⼈员完全可以 “吃透” 它。其次Redis 使⽤单线程模型这样不仅使得 Redis 服务端处理模型变得简单⽽且也使得客⼾端开发变得简单。最后Redis 不需要依赖于操作系统中的类库例如 Memcache 需要依赖 libevent 这样的系统类库Redis ⾃⼰实现了事件处理的相关功能。但与简单相对的是 Redis 具备相当的稳定性在⼤量使⽤过程中很少出现因为 Redis ⾃⾝ BUG⽽导致宕掉的情况。客⼾端语⾔多Redis 提供了简单的 TCP 通信协议很多编程语⾔可以很⽅便地接⼊到 Redis并且由于 Redis 受到社区和各⼤公司的⼴泛认可所以⽀持 Redis 的客⼾端语⾔也⾮常多⼏乎涵盖了主流的编程 语⾔例如 C、C、Java、PHP、Python、NodeJS 等后续我们会对 Redis 的客⼾端使⽤做详细说明。持久化Persistence通常看将数据放在内存中是不安全的⼀旦发⽣断电或者机器故障重要的数据可能就会丢失因此 Redis 提供了两种持久化⽅式RDB 和 AOF即可以⽤两种策略将内存的数据保存到硬盘中这样就保证了数据的可持久性后续我们将对 Redis 的持久化进⾏详细说明。Redis 内存到硬盘的持久化主从复制ReplicationRedis 提供了复制功能实现了多个相同数据的 Redis 副本Replica复制功能是分布式 Redis 的基础。⾼可⽤High Availability和分布式DistributedRedis 提供了⾼可⽤实现的 Redis 哨兵Redis Sentinel能够保证 Redis 结点的故障发现和故障⾃动转移。也提供了 Redis 集群Redis Cluster是真正的分布式实现提供了⾼可⽤、读写和容量的扩展性。1.2Redis 使⽤场景1.2.1 Redis可以做什么缓存Cache缓存机制⼏乎在所有⼤型⽹站都有使⽤合理地使⽤缓存不仅可以加速数据的访问速度⽽且能够有效地降低后端数据源的压⼒。Redis 提供了键值过期时间设置并且也提供了灵活控制最⼤内存和内存溢出后的淘汰策略。可以这么说⼀个合理的缓存设计能够为⼀个⽹站的稳定保驾护航。排⾏榜系统排⾏榜系统⼏乎存在于所有的⽹站例如按照热度排名的排⾏榜按照发布时间的排⾏榜按照各种复杂维度计算出的排⾏榜Redis 提供了列表和有序集合的结构合理地使⽤这些数据结构可以很⽅便地构建各种排⾏榜系统。计数器应⽤计数器在⽹站中的作⽤⾄关重要例如视频⽹站有播放数、电商⽹站有浏览数为了保证数据的实时性每⼀次播放和浏览都要做加 1 的操作如果并发量很⼤对于传统关系型数据的性能是⼀种挑战。Redis 天然⽀持计数功能⽽且计数的性能也⾮常好可以说是计数器系统的重要选择。社交⽹络赞 / 踩、粉丝、共同好友 / 喜好、推送、下拉刷新等是社交⽹站的必备功能由于社交⽹站访问量通常⽐较⼤⽽且传统的关系型数据不太合适保存这种类型的数据Redis 提供的数据结构可以相对⽐较容易地实现这些功能。消息队列系统消息队列系统可以说是⼀个⼤型⽹站的必备基础组件因为其具有业务解耦、⾮实时业务削峰等特性。Redis 提供了发布订阅功能和阻塞队列的功能虽然和专业的消息队列⽐还不够⾜够强⼤但是对于⼀般的消息队列功能基本可以满⾜。1.2.2Redis 不可以做什么实际上和任何⼀⻔技术⼀样每个技术都有⾃⼰的应⽤场景和边界也就是说 Redis 并不是万⾦油有很多合适它解决的问题但是也有很多不合适它解决的问题。我们可以站在数据规模和数据冷热的⻆度来进⾏分析。站在数据规模的⻆度看数据可以分为⼤规模数据和⼩规模数据我们知道 Redis 的数据是存放在内存中的虽然现在内存已经⾜够便宜但是如果数据量⾮常⼤例如每天有⼏亿的⽤⼾⾏为数据使⽤ Redis 来存储的话基本上是个⽆底洞经济成本相当⾼。站在数据冷热的⻆度数据分为热数据和冷数据热数据通常是指需要频繁操作的数据反之为冷数据例如对于视频⽹站来说视频基本信息基本上在各个业务线都是经常要操作的数据⽽⽤⼾的观看记录不⼀定是经常需要访问的数据这⾥暂且不讨论两者数据规模的差异单纯站在数据冷热的⻆度上看视频信息属于热数据⽤⼾观看记录属于冷数据。如果将这些冷数据放在 Redis 上基本上是对于内存的⼀种浪费但是对于⼀些热数据可以放在 Redis 中加速读写也可以减轻后端存储的负载可以说是事半功倍。所以Redis 并不是万⾦油相信随着我们对 Redis 的逐步学习能够清楚 Redis 真正的使⽤场景。1.3 安装并启动Redis我们这里使用5.0版本。因为这个版本已经支持乐大部分功能特性并且安装简单。接下来我们选择在 Linux 上安装 Redis.1.3.1 在Ubuntu上面安装Redisapt install redis -y⽀持远程连接修改/etc/redis/redis.conf修改bind 127.0.0.1为bind 0.0.0.0修改protected-mode yes为protected-mode no# By default, if no bind configuration directive is specified, Redis listens # for connections from all the network interfaces available on the server. # It is possible to listen to just one or multiple selected interfaces using # the bind configuration directive, followed by one or more IP addresses. # # Examples: # # bind 192.168.1.100 10.0.0.1 # bind 127.0.0.1 ::1 # # ~~~ WARNING ~~~ If the computer running Redis is directly exposed to the # internet, binding to all the interfaces is dangerous and will expose the # instance to everybody on the internet. So by default we uncomment the # following bind directive, that will force Redis to listen only into # the IPv4 loopback interface address (this means Redis will be able to # accept connections only from clients running into the same computer it # is running). # # IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES # JUST COMMENT THE FOLLOWING LINE. # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # bind 127.0.0.1 # 注释掉这⾏ bind 0.0.0.0 # 添加这⾏ protected-mode no # 把 yes 改成 no1.3.2控制 Redis 启动启动 Redis 服务service redis-server start停⽌ Redis 服务service redis-server stop重启 Redis 服务service redis-server restart修改配置文件之后需要重启redis。1.3.3 Redis重要文件及其作用启动/停⽌命令或脚本/usr/bin/redis-benchmark/usr/bin/redis-check-aof - /usr/bin/redis-server/usr/bin/redis-check-rdb - /usr/bin/redis-server/usr/bin/redis-cli/usr/bin/redis-sentinel - /usr/bin/redis-server/usr/bin/redis-server/usr/libexec/redis-shutdownredis-server 是 Redis 服务器程序其余的⼏个例如redis-check-aof、redis-check-rdb、redissentinel 也都是 redis-server 的软链接。redis-check-aof 是修复 AOF ⽂件⽤的⼯具同理 redischeck-rdb 是修复 RDB ⽂件的⼯具redis-sentinel 是 Redis 哨兵程序。redis-cli 是在我们学习阶段需要频繁⽤到的⼀个命令⾏客⼾端程序随后做介绍。redis-benchmark ⽤于对 Redis 做性能基准测试的⼯具。redis-shutdown 是⽤于停⽌ Redis 的专⽤脚本。配置⽂件/etc/redis-sentinel.conf/etc/redis.conf/etc/redis.conf 是 Redis 服务器的配置⽂件。/etc/redis-sentinel.conf 是 Redis Sentinel 的配置⽂件。持久化⽂件存储⽬录/var/lib/redis/Redis 持久化⽣产的 RDB 和 AOF ⽂件都默认⽣成于该⽬录下。后边章节我们讲到持久化时会观察这边持久化的⼀些现象。⽇志⽂件⽬录/var/log/redis//var/log/redis/ ⽬录下会保存 Redis 运⾏期间⽣产的⽇志⽂件默认按照天进⾏分割并且会将⼀定⽇期的⽇⼦⽂件使⽤ gzip 格式压缩保存。可以使⽤任意⽂本编辑器打开后边章节我们会通过⽇志来观察⼀些现象。1.4 Redis 命令行客户端现在我们已经启动了 Redis 服务下⾯将介绍如何使⽤ redis-cli 连接、操作 Redis 服务。redis-cli 可以使⽤两种⽅式连接 Redis 服务器。第⼀种是交互式⽅式通过 redis-cli -h { host } -p { port } 的⽅式连接到 Redis 服务后续所有的操作都是通过交互式的⽅式实现不需要再执⾏ redis-cli 了例如[roothost ~]# redis-cli -h 127.0.0.1 -p 6379127.0.0.1:6379 pingPONG127.0.0.1:6379 set key helloOK127.0.0.1:6379 get keyhello第⼆种是命令⽅式⽤redis-cli -h { host } -p { port } { command } 就可以直接得到命令的返回结果例如[roothost ~]# redis-cli -h 127.0.0.1 -p 6379 pingPONG[roothost ~]# redis-cli -h 127.0.0.1 -p 6379 set key helloOK[roothost ~]# redis-cli -h 127.0.0.1 -p 6379 get keyhello由于我们连接的 Redis 服务位于 127.0.0.1端⼝也使⽤的是默认的 6379端⼝所以可以省略 -h { host } -p { port }。