初识Redis
Redis是一种基于键值对的NoSQL数据库但是,与很多键值对数据库不一样的是,Redis中的值可以是string、hash、list、set、zset(有序集合)、Bitmaps(位图)、HyperLogLog、GEO(地理定位信息)多种数据结构和算法组成
因此Redis可以满足很多的应用程序,而且因为Redis会将所有的数据都存放在内存中,所以他的读写性能非常高
不仅如此,Redis还可以将内存中的数据利用快照和日志的形式保存到硬盘上,这样在发生类似断电或机器故障的时候,内存中原本的数据不会丢失。
除了上述功能,Redis还提供了键过期,发布订阅,事务,流水线,Lua脚本等附加功能。
文章目录
- 1. Redis特性
- 速度快
- 基于键值对的数据结构服务器
- 简单稳定
- 丰富的功能
- 客户端语言多
- 持久化
- 主从复制
- 高可用和分布式
- 2. Redis使用场景
- Real-time data store
- Caching
- session storage
- Stream & message
- 其他应用
- 3. 安装并启动Redis(Ubuntu)
- 使用apt安装
- 修改配置文件
- 启停Redis
- 3. 简单认识Redis命令行客户端
- 交互形式
- 命令方式
1. Redis特性
速度快
- Redis的所有数据都是存放在内存中的,相对于访问硬盘的Mysql等数据库,就要快得多
- Redis的核心功能都是比较简单的逻辑,如操作内存的数据结构,相比于MySql等数据库的复杂操作,如索引等,快得多
- 从网络上来说,Redis使用了IO多路复用的方式
基于键值对的数据结构服务器
与很多键值的数据库不同的是,Redis中的值不仅仅是字符串,还可以是具体的数据结构,这样不仅能便于在许多应用场景的开发,同时也能提高开发效率
简单稳定
- Redis的源码很少,相对于很多的NoSql数据库来说代码量相对要少很多
- Redis使用单线程模型,这样不仅仅使得Redis服务端处理模型变得简单,而且也使得客户端开发变得简单
- Redis不需要依赖于操作系统中的类库,Redis自己实现了事件处理的相关功能
注意:单线程是否会影响Redis的性能??
答案是否定的,多线程提高效率的前提是CPU密集型的任务,使用多个线程可以充分的;利用CPU多核资源
但是Redis的核心任务是操作内存的数据结构,不会吃很多CPU
丰富的功能
- 提供了键过期的功能,可以用来实现缓存
- 提供了发布订阅版本的功能,可以用来实现消息队列
- 支持Lua脚本功能,可以利用Lua创造出新的Redis命令
- 提供简单的事务功能,能在一定程度上保证事务特性
- 提供了流水线功能,这样客户端能将一批命令一次性传到Redis,减少了网络的开销
客户端语言多
Redis提供了简单的TCP通信协议,很多编程语言可以很方便地接入到Redis,并且由于Redis受到社区和各大公司的广泛认可,所以支持Redis的客户端语言也非常多,几乎涵盖了主流的编程语言
持久化
通常看来存储在内存中的数据是不安全的,一旦发生断电或者机器故障,重要的数据就可能会丢失
但是,Redis提供了两种持久化方式:RDB和AOF,即可以通过这两种方式将内存中的数据保存到硬盘里面.这样就保证了数据的可持久化
主从复制
Redis提供了复制功能,实现了多个相同数据的Redis副本,复制功能是分布式Redis的基础
高可用和分布式
Redis提供了高可用的Redis哨兵,能够保证Redis结点的故障发现和故障自动转移,也提供了Redis集群,实现了分布式,提供了高可用、读写和容量的拓展性
2. Redis使用场景
Real-time data store
大多数情况下,考虑到数据存储,优先考虑的是"大",但是仍然有一些场景,考虑的是"快"
使用MySql存储数据的特点是大,但是慢,使用Redis这样的内存数据库就很快了,但是存储大量的数据,是需要不少的硬件资源的
在这种情况下,Redis存的是全量的数据,是不能随便丢弃的
Caching
就是将原本MySql数据库中的热点数据也存储在Redis中
此时Redis存储的是部分数据,全量数据还是以Mysql为主,哪怕Redis的数据真的没了,还可以从MySql这里再加载回来
session storage
在网络请求中,一个比较重要的部分是cookie和session,实现了用户身份信息的保存
但是传统的session是存储在应用服务器上的,此时就会出现问题
如果是分布式系统:
如果第一次登录操作后的Session存在第一台服务器上,而下次访问时,负载均衡将请求分发到其他服务器上,就会出现找不到Session的情况
解决解决上面的方法有两种:
- 让负载均衡器将同一个用户的请求始终打到同一台服务器上,可以通过userId计算hash来实现
- 把会话数据单独拿出来,放到一组独立的机器上存储(Redis),还有一个好处就是即使是我们的服务器重启了,Session也不会消失
Stream & message
将Redis最为消息队列,在分布式系统中,服务器和服务器之间有时候也需要谈到生产者消费者模型,基于Redis可以实现一个网络版的生产者消费者模型,Redis提供了发布订阅阻塞队列的功能,虽然和专业的消息队列比还是不够强大,但是对于一般的消息队列功能基本可以满足
其他应用
- 排行榜系统
例如按照热度排名的排行榜,按照发布时间的排行榜,按照2各种复杂维度计算出的排行榜,Redis提供了列表和有序集合的结构,合理的使用这些数据结构可以很方便的构建各种排行榜系统
- 计数器应用
例如视频网站的播放数,电商网站的浏览数,为了保证数据的实时性,每一次播放和浏览都要进行+1的操作,但是如果并发量很大对于传统关系型数据库的性能是一种很大的挑战。Redis天然支持计数功能而且计数的功能也非常好,可以说是计数器系统的重要选择
- 社交网络
赞/踩、粉丝、共同好友/喜欢、推送。下拉刷新等是社交网站的必备功能,由于社交网站的访问量通常比较大,而且传统的关系型数据库不太适合保存这种类型的数据,Redis提供的数据结构可以比较容易的实现这些功能
3. 安装并启动Redis(Ubuntu)
使用apt安装
apt install redis -y
修改配置文件
修改配置文件让Redis支持远程连接
vim /etc/redis/redis.conf
启停Redis
启动
service redis-server start
停止
service redis-server stop
重启
service redis-server restart
查看状态
3. 简单认识Redis命令行客户端
通过redis-cli可以使用两种方式连接到客户端
交互形式
通过redis-cli -h{host} -p{port}的方式连接到Redis服务,后续所有的操作都是通过交互的方式进行,不必再执行redis-cli了
通过ctrl+d就能退出交互模式
其中,由于此时的Redis服务位于本机,端口也使用的默认的6379,因此可以省略-h{host} -p{port}
命令方式
root@hcss-ecs-cddb:~# redis-cli -h 127.0.0.1 -p 6379 ping
PONG