本文转载搜狗测试
最近在学Redis,相信大家对Redis这个技术都有所耳闻,前段时间通过搜狗手机助手与合作方流量合作需求的测试过程中需要用到Redis,当时对Redis也是处于初级的了解阶段,想要学好Redis处于了解阶段是远远不够的,我们需要的就是系统的学习Redis。下面是我系统学习Redis的第一步,希望大家看完能有所收获。
1 Redis是什么?
First of all,让我们看看Redis官网是怎么做的自我介绍,像我一样英文不太好的小伙伴不要着急,使用翻译助手就会看懂Redis的个人简介,它是一个开源的,基于内存的数据结构存储,可用作数据库、缓存、消息中间件。 在这里有几个关键词需要重点理解:内存、数据结构、缓存,这样更能帮助我们学明白Redis。
2 为什么使用Redis?
为什么使用Redis呢?主要是两个原因:一是快,二是高并发。
(1)快的原因有:
1. Redis是纯内存操作,避免频繁读写IO浪费时间;
2. 单线程运行;
3. 采用了非阻塞IO多路复用机制。
(2)高并发:
在高并发的情况下,所有的请求直接访问数据库,数据库可能会出现连接异常,这个时候如果使用Redis做一个缓存操作,让用户请求先访问Redis而不是直接访问数据库。
这个时候就不得不提Redis是基于内存、并且存储方式是key-value的形式,也许学过Java的小伙伴就会有个疑问,作为缓存,Java中的Map容器的存储方式也是key-value,为什么不用Map呢?
看了下面这些可以帮你解除疑惑:
Java实现的Map是本地缓存,如果有很多个实例的话,每个实例都需要各自保存一份缓存,缓存不具有一致性。 | Redis实现的是分布式缓存,如果有多个实例的话,每个实例都共享一份缓存,缓存具有一致性。 |
Java实现的Map不是专业做缓存的,JVM如果太大容易挂掉。一般用作于容器来存储临时数据,缓存的数据会随着JVM的销毁而结束。Map所存储的数据结构,无缓存过期机制。 | Redis是专业做缓存的,可以用几十个G内存来做缓存。Redis一般用作于缓存,可以将缓存数据保存在硬盘中,Redis重启了之后可以将其恢复。原生提供丰富的数据结构、缓存过期机制等等简单好用的功能。 |
3为什么Redis用于缓存?
其实用2张图,你就可以明白其中的道理:
-
首先是没有缓存的情况下,这个时候如果遇到高并发,
数据库就撑不住了 ,很容易出现性能问题,原因是数据库的读写是经过磁盘的,而磁盘的速度很慢。
-
有缓存的情况下,查询的数据先去缓存中判断,如果
有的话直接返回,没有的话再去数据库中查,这种方式不仅提高了性能,而且提高了高并发的能力。 提高性能的原因是,缓存查询速度快于数据库查询,内存的读写速度大于硬盘的读写速度提高高并发能力的原因是缓存分担了部分请求。
4 Redis数据类型
Redis支持五种数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)及Zset(sorted set:有序集合)。
1)String
Stirng是Redis最基本的类型,一个key对应一个value,一个键最大能存储512MB,key值是二进制安全的,就意味着Redis的string可以包含任何数据,包括空字串。
2)Hash
Hash是一个键值对的集合,也就是key=>value,是一个string类型的field和value的映射表,很适合用于存储对象。
3)List
基于linked list 实现,双向无环链表。元素是字符串类型。元素头尾增删快,中间增删慢,增删元素是常态。元素可以重复出现。
4)Set
Set通过哈希表实现的。无序的,不可重复的(可去重)。
5)Zset
类似set集合,有序的,不可重复的。每一个元素都关联着一个浮点数分值(score),并按照分值从小到大的顺序排列集合中的元素,分值可以相同。