Redis理论

 


什么是Redis

Redis(Remote Dictionary Server)是使用C语言编写的,开源的(BSD许可)高性能非关系型(NoSQL)的键值对数据库。
Redis可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串,值支持五种数据类型:字符串、列表、散列表、有序集合。
与 传统数据库不同的是Redis的数据是存再内存中的,所以读写速度非常快,因此Redis被广泛应用于缓存方向,每秒可以处理超过10万次读写操作,是已知性能最快的Key-ValueDB.另外,Redis也经常用来做分布式锁。除此之外,Redis支持事务,持久化、LUA脚本、LRU驱动事件,多种集群方案。

Redis有哪些优缺点

优点:

  • 读写性能优异,Redis能读的速度是110000次/s,写的速度是81000次/s
  • 支持数据持久化,支持AOF和RDB两种持久化方式。
  • 支持事务,Redis的所有操作都是原子性,同时Redis还支持对几个操作合并后的原子性执行。
  • 数据结构丰富,除了支持string类型的value还支持hash、set、zset、list等数据结构。
  • 支持主从复制,主机会自动将数据同步到从机,可以进行读写分离。
    缺点:
  • 数据库容量收到物理内存的限制,不用作海量数据的高性能读写,因此Redis适合的场景主要局限再较小数据量的高性能操作和运算上。
  • 主机宕机,宕机前有部分数据未能及时同步到从机;切换IP后还会引入数据不一致的问题,降低了系统的可再用性。
  • Redis较难支持在线扩容,在集群容量达到上限时在线扩容变得会很复杂。为了避免这一问题,运维人员在系统上线时必须保证有足够的空间,这对资源造成了很大的浪费。
    为什么要用Redis/为什么要用缓存?
    主要用"高性能"和"高并发"这两点看待这个问题。
    高性能
    假如用户第一次访问数据库中的某些数据。这个过程会比较慢,因为是从硬盘上读取的。将用户访问的数据在缓存中,这样下次再访问这个数据的时候就可以直接从缓存中获取了。操作缓存就是直接操作内存,所以速度相当快。如果数据库中的对应数据改变的之后,同步改变缓存中相应的数据即可!

高并发
直接操作缓存能够承受的请求是远远大于直接访问数据库的,所以我们可以考虑把数据库中的部分数据转移懂缓存中去,这样用户的一部分请求会直接缓存这里而不用经过数据库。

为什么要用Redis而不用map/guava做缓存?

缓存分为本地缓存和分布式缓存。以java为例,使用自带的map或者guava实现的是本地缓存,最主要的特点是轻量以及快速,声明周期随着jvm的销毁而结束,并且再多实列的情况下,每个实例都需要各自保存一份缓存,缓存不具有一致性。
使用redis或者memcahed之类的称为分布式缓存,在多实例的情况下,各个例共用一份缓存数据,缓存具有一致性。缺点需要保持redis或memcached服务的高可用,整个程序架构上较为复杂。

Redis为什么这么快?

  • 完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。数据存在内存中,类似于HashMap,HashMap的优势就在于查找和操作的数据复杂度都是O(1).
    2.数据结构简单,对数据操作也简单,Redis中的数据结构是专门进行设计的;
    3.采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗CPU,不用考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗;
  • 使用多路I/O服用模型,非阻塞;
  • 使用底层模型不同,他们之间底层实现方式以及与客户端之间通信的应用协议不一样,Redis直接自己构建了VM机制,因为一般的系统调用函数的话,会浪费一定的时间去移动和请求;

数据类型

Redis有哪些数据类型

Redis主要有五种数据类型,包括String,List,Set,Zset,Hash,满足大部分的使用要求。

本文作者:不会笑的孩子

本文链接:https://www.cnblogs.com/doubleconquer/p/16774466.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   不会笑的孩子  阅读(33)  评论(0编辑  收藏  举报
历史上的今天:
2021-10-10 硬编码结构示意图
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.