目录
Redis
1. Redis的背景知识
2.Redis特性
3.Redis的使用场景
4.Ubuntu上安装配置Redis
Redis
Redis在当今编程技术中的地位可以说非常重要,大多数互联网公司内部都在使用这个技术,熟练使用Redis已经成为开发人员的一个必备技能。 本章将带领读者进⼊ Redis 的世界,了解它的前世今⽣、众多特性、典型应⽤场景、安装配置等。
1. Redis的背景知识
Redis 是⼀种基于键值对(key-value)的 NoSQL 数据库,与很多键值对数据库不同的是,Redis中的值可以是由 string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、Bitmaps(位图)、HyperLogLog、GEO(地理信息定位)等多种数据结构和算法组成,因此 Redis可以满⾜很多的应⽤场景,⽽且因为 Redis 会将所有数据都存放再内存中,所以它的读写性能⾮常惊⼈。不仅如此,Redis 还可以将内存的数据利⽤快照和⽇志的形式保存到硬盘上,这样在发⽣类似断电或者机器故障的时候,内存中的数据不会“丢失”。除了上述功能以外,Redis 还提供了键过期、发布订阅、事务、流⽔线、Lua 脚本等附加功能。
2008 年,Redis 的作者 Salvatore Sanfilippo 在开发⼀个叫 LLOOGG 的⽹站时,需要实现⼀个⾼性能的队列功能,最开始是使⽤ MySQL 来实现的,但后来发现⽆论怎么优化 SQL 语句等都不能使⽹站的性能提⾼上去,再加上⾃⼰囊中羞涩,于是他决定⾃⼰做⼀个专属于 LLOOGG 的数据库,这个就是 Redis 的前⾝。后来,Salvatore Sanfilippo 将 Redis 1.0 的源码发布到 Github 上,可能连他⾃⼰都没想到,Redis 后来如此受欢迎。
从 Redis 的官⽅公司统计来看,有很多重量级的公司都在使⽤Redis,如国外的 Twitter,Instagram、Stack Overflow、Github 等,国内就更多了,如果单单从体量来统计,新浪微博可以说是全球最⼤的 Redis 使⽤者,除了新浪微博,还有像阿⾥巴巴、腾讯、搜狐、优酷⼟⾖、美团、⼩⽶、唯品会等公司都是 Redis 的使⽤者。除此之外,许多开源技术像 ELK 等已经把 Redis 作为它们组件中的重要⼀环,⽽且 Redis 还提供了模块系统让第三⽅⼈员实现功能扩展,让 Redis 发挥出更⼤的威⼒。
2.Redis特性
(1)速度快
官⽅给出的数字是读写性能可以达到 10 万 / 秒,为什么Redis能保证速度这么快呢?
- Redis 的所有数据都是存放在内存中的,把数据放在内存中是 Redis 速度快的最主要原因。
- Redis 是⽤ C 语⾔实现的,⼀般来说 C 语⾔实现的程序 “距离” 操作系统更近,执⾏速度相对会更快。
- Redis 使⽤了单线程,预防了多线程可能产⽣的竞争问题。
- 作者对于 Redis 源代码可以说是精打细磨,曾经有⼈评价 Redis 是少有的集性能和优雅于⼀⾝的开源代码。
(2)基于键值对的数据结构服务器
Redis 的全称是 REmote Dictionary Server,与其他语言中键值对功能不同的是Redis 中的值不仅可以是字符串,⽽且还可以是具体的数据结构,Redis官方文档提供了十种数据结构,常见的有字符串,哈希,列表,集合,有序集合等。
(3)丰富的功能
- 提供了键过期功能,可以⽤来实现缓存。
- 提供了发布订阅功能,可以⽤来实现消息系统。
- ⽀持 Lua 脚本功能,可以利⽤ Lua 创造出新的 Redis 命令。
- 提供了简单的事务功能,能在⼀定程度上保证事务特性。
- 提供了流⽔线(Pipeline)功能,这样客⼾端能将⼀批命令⼀次性传到 Redis,减少了⽹络的开销。
(4)简单稳定
Redis简单稳定有三方面的原因:
- Redis的源码很少,可以被大多数资深的程序员给学透。
- Redis使用单线程模型,服务器模型简单,不会出现线程安全问题。
- 不需要调用操作系统中的类库,Redis自己实现了相关功能。
(5) 支持C、C++、Java、PHP、Python、NodeJS在内的多种客户端语言。
(6)可以实现Redis内存到硬盘的持久化
(7)提供了复制功能,支持主从复制
(8)支持高可用和分布式
3.Redis的使用场景
1.缓存(Cache)
缓存机制⼏乎在所有⼤型⽹站都有使⽤,合理地使⽤缓存不仅可以加速数据的访问速度,⽽且能够有效地降低后端数据源的压⼒。Redis 提供了键值过期时间设置,并且也提供了灵活控制最⼤内存和内存溢出后的淘汰策略。可以这么说,⼀个合理的缓存设计能够为⼀个⽹站的稳定保驾护航。
2.排⾏榜系统
排⾏榜系统⼏乎存在于所有的⽹站,例如按照热度排名的排⾏榜,按照发布时间的排⾏榜,按照各种复杂维度计算出的排⾏榜,Redis 提供了列表和有序集合的结构,合理地使⽤这些数据结构可以很⽅便地构建各种排⾏榜系统。
3.计数器应⽤
计数器在⽹站中的作⽤⾄关重要,例如视频⽹站有播放数、电商⽹站有浏览数,为了保证数据的实时性,每⼀次播放和浏览都要做加 1 的操作,如果并发量很⼤对于传统关系型数据的性能是⼀种挑战。Redis 天然⽀持计数功能⽽且计数的性能也⾮常好,可以说是计数器系统的重要选择。
4.社交⽹络
赞 / 踩、粉丝、共同好友 / 喜好、推送、下拉刷新等是社交⽹站的必备功能,由于社交⽹站访问量通常⽐较⼤,⽽且传统的关系型数据不太合适保存这种类型的数据,Redis 提供的数据结构可以相对⽐较容易地实现这些功能。
5.消息队列系统
消息队列系统可以说是⼀个⼤型⽹站的必备基础组件,因为其具有业务解耦、⾮实时业务削峰等特性。Redis 提供了发布订阅功能和阻塞队列的功能,虽然和专业的消息队列⽐还不够⾜够强⼤,但是对于⼀般的消息队列功能基本可以满⾜。
4.Ubuntu上安装配置Redis
Redis官方其实是没有提供Windows版本的,微软维护了一个Windows版本的Redis分支。
Ubuntu上安装配置Redis大概分为六个步骤:
- 先使用su命令切换为root用户
- 使用apt命令搜索Redis相关软件包 apt search redis
- 使用apt命令安装redis apt install redis
- 手动修改配置文件,更改ip保证可以跨主机访问,配置文件所在路径(/etc/redis/redis.conf)
- 重新启动服务器 service redis-server restart
- 使用redis自带的客户端来连接服务器 redis-cli连接 ctrl + d退出redis客户端