简述redis特点及其应用场景

简述redis特点及其应用场景

1 Redis 简介

Redis (Remote Dictionary Server) ,远程字典服务,Redis是一个开源的、遵循BSD协议的、基于内存的而且目前比较流行的键值数据库(key-value database),是一个非关系型数据库。redis 提供将内存通过网络远程共享的一种服务,提供类似功能的还有memcached,但相比memcached,redis还提供了易扩展、高性能、具备数据持久性等功能。 Redis 在高并发、低延迟环境要求比较高的环境使用量非常广泛。

2 Redis 特性

  • 速度快:10W QPS,基于内存,C语言实现
  • 单线程
  • 持久化
  • 支持多种数据结构
  • 支持多种编程语言
  • 功能丰富:支持Lua脚本,发布订阅,事务,pipeline等功能
  • 简单:代码短小精悍(单机核心代码只有23000行左右),单线程开发容易,不依赖外部库,使用简单
  • 主从复制
  • 支持高可用和分布式

2.1 单线程

Redis 6.0版本前一直是单线程方式处理用户的请求

单线程为何如此快?

  • 纯内存
  • 非阻塞
  • 避免线程切换和竞态消耗

注意事项:

  • 一次只运行一条命令
  • 拒绝长(慢)命令:keys,flushall,flushdb,slow lua script,mutil/exec,operate big value(collection)
  • 其实不是单线程:早期版本是单进程单线程,3版本后实际还有其它的线程,实现特定功能,如:fysnc file descriptor,close file descriptor

3 redis 对比 memcached

  • 支持数据的持久化:可以将内存中的数据保持在磁盘中,重启redis服务或者服务器之后可以从备份文件中恢复数据到内存继续使用
  • 支持更多的数据类型:支持string(字符串)、hash(哈希数据)、list(列表)、set(集合)、zset(有序集
    合)
  • 支持数据的备份:可以实现类似于数据的master-slave模式的数据备份,另外也支持使用快照+AOF
  • 支持更大的value数据:memcache单个key value最大只支持1MB,而redis最大支持512MB(生产不建议超过2M,性能受影响)
  • 在Redis6版本前,Redis 是单线程,而memcached是多线程,所以单机情况下没有memcached 并发高,性能更好,但redis 支持分布式集群以实现更高的并发,单Redis实例可以实现数万并发
  • 支持集群横向扩展:基于redis cluster的横向扩展,可以实现分布式集群,大幅提升性能和数据安全性
  • 都是基于 C 语言开发

4 redis 典型应用场景

  • Session 共享:常见于web集群中的Tomcat或者PHP中多web服务器session共享
  • 缓存:数据查询、电商网站商品信息、新闻内容
  • 计数器:访问排行榜、商品浏览数等和次数相关的数值统计场景
  • 微博/微信社交场合:共同好友,粉丝数,关注,点赞,评论等
  • 消息队列:ELK的日志缓存、部分业务的订阅发布系统
  • 地理位置:基于GEO(地理信息定位),实现摇一摇,附近的人,外卖等功能

猜你喜欢

转载自blog.csdn.net/weixin_51867896/article/details/124547125