Redis实战指南:从入门到精通

发表时间: 2021-03-03 08:52

什么是Redis

Redis是一款开源的内存中数据结构存储,可以用作数据库,缓存和消息代理。Redis支持包括string(字符串)、list(列表)、set(集合)、zset(有序集合)及hash(哈希)等数据类型存储,并提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等多种语言的API支持。Redis具有内置的复制,Lua脚本,LRU逐出,事务和不同级别的磁盘持久性,并通过Redis Sentinel和Redis Cluster自动分区提供了高可用性。

Redis框架

Redis采用了C/S框架(Client/Server,客户/服务器模式),为了让Redis的数据更稳定安全所有的数据操作和维护都在服务端执行,而用户只需要通过Redis客户端发送相关的指令即可。Redis为不同的数据结构提供了相应的API,可以方便用户对Redis进行各种操作。Redis是一对多服务器,可以和多个客户端相连。Client和Server可以是在同一设备上,也可以在不同设备上(Client可以通过Server的IP和端口进行访问)。这样设计的好处可以降低服务器的开销,充分利用两端硬件环境的优势。客户端进行用户事物处理,服务端进行数据处理。随着redis对框架的不断改进,实现了本地持久化、主从备份、哨兵模式、群集等高可用架构方案。

Redis的优势

  1. Redis由C语言实现,具备超高的读写性能。Redis能读的速度高达110000次/s,写的速度高达81000次/s 。
  2. Redis数据存在内存中,数据操作极快。可以快速响应用户需求,支撑海量的数据和流量。
  3. 丰富的数据类型,支持String、Hash、List、Set、 SortSet等多种数据类型。同时提供了丰富的操作命令,可以满足绝大部分的用户需求。
  4. 操作具有原子性,所有操作要么成功执行要么失败完全不执行。
  5. 丰富的特性,支持 publish/subscribe、通知、key过期等特性。可用于缓存,消息列队。通过key设置过期时间,过期后将会自动删除。
  6. 支持数据持久化,可将存放在内存中的数据直接保存到磁盘上。
  7. 支持数据实时备份,即使宕机也可以及时地恢复数据。

Redis的缺点

  1. 内存存储虽然快但是内存也容易紧缺。如果内存不足读写时就容易发生错误,所以内存增长过快则需要定期删除数据。
  2. redis是单线程服务,单台服务器无法充分利用服务器资源。
  3. 修改配置文件重启需要将硬盘中的数据载入内存,这个过程redis无法提供服务。

Redis应用场景

在我们的Web项目中数据基本都是用数据库来存储的,只是根据项目不同使用的数据库不同。市面上比较常用的数据库为:MySQL、Microsoft SQL Server、Oracle、DB2、Access、Mongodb、Redis等,每种数据库都有其特点和使用场景。Redis主要用来应对高并发、高读/写等问题,可以缓解服务器压力避免因海量数据访问造成数据库系统瘫痪甚至服务宕机等问题产生(比如淘宝双11狂欢,一天要承载多少的问题量?)。Redis主要应用在缓存系统(用Redis作为缓存存储数据,提升页面响应速度)、计数器(Redis在内存中对数字进行换算操作非常简单快捷)、消息队列系统(直接提供列表存储和列表操作)、排行榜(利用有序集合实现排行榜非常简单)、订阅发布、日志、社交网络、实时系统及Key-Value数据库,也可以用作消息回复、点赞、粉丝、下拉刷新及过期数据删除操作