reids(缓存,reids下载,安装 测试)

时间:2021-12-15 01:31:20

什么是缓存:缓存就是数据交换的缓冲区(称作Cache),当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找。由于缓存的运行速度比内存快得多,故缓存的作用就是帮助硬件更快地运行,缓存数据存放内存条

什么是java内置缓存:将数据存放在jvm中,关闭服务,则缓存数据清空,可以用一个static Map 来实现一个简单的java缓存:

reids(缓存,reids下载,安装 测试)

package com.example.demo;

import java.util.HashMap;
import java.util.Map; public class MapCache {
public static Map map = new HashMap<>(); public void mapAdd(Object key, Object value) {
map.put(key, value);
} public Object get(Object key) {
return map.get(key);
}
}

缓存中有了解到的有:(springboot中使用ehcache 只能单服务器使用)

  1. Oscache
    OSCache由OpenSymphony设计,它是一种开创性的JSP定制标记应用,提供了在现有JSP页面之内实现快速内存缓冲的功能(mybatis 二级缓存机制使用oscache)
  2. EhCache
    EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider(hibernate二级缓存机制使用ehcache)

OsCache与EhCache区别

ehcache 主要是对数据库访问的缓存,相同的查询语句只需查询一次数据库,从而提高了查询的速度,使用spring的AOP可以很容易实现这一功能。

oscache 主要是对页面的缓存,可以整页或者指定网页某一部分缓存,同时指定他的过期时间,这样在此时间段里面访问的数据都是一样的。

java内置缓存缺点:内存溢出(static修饰),没有持久化(重启以后数据清空丢失),jvm缓存在多态服务器的时候不能数据共享,线程安全问题(多个线程操作共享变量的时候 都可能出现)

使用jvm缓存 存在很多缺陷 推荐使用Nosql(非关系型数据库) 项目中 使用的是redis,其余小组用的是mogodb

  • 什么是Nosql:NoSQL 是 Not Only SQL 的缩写,意即"不仅仅是SQL"的意思,泛指非关系型的数据库。强调Key-Value Stores和文档数据库的优点,而不是单纯的反对RDBMS。NoSQL产品是传统关系型数据库的功能阉割版本,通过减少用不到或很少用的功能,来大幅度提高产品性能
  • NoSQL产品: Redis、mongodb MembaseHBase
  • 产品比较:

    Redis 与Membase区别

    Redis支持数据的持久化,可以将数据存放在硬盘上。

    Memcache不支持数据的之久存储。

    Redis数据类型丰富,支持set liset等类型

    Memcache支持简单数据类型,需要客户端自己处理复制对象

什么是redis: Redis是一种开源(BSD许可)、内存中的数据结构存储,用作数据库、缓存和消息代理。它支持数据结构,如字符串、散列、列表、集合、带范围查询的排序集、位图、超loglogs、带半径查询的地理空间索引和流。Redis具有内置的复制、Lua脚本、LRU退出、事务和不同级别的磁盘持久性,并通过Redis Sentinel和使用Redis集群的自动分区提供高可用性。

Redis

Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。

Redis 与其他 key - value 缓存产品有以下三个特点:

Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

Redis支持数据的备份,即master-slave模式的数据备份。

Redis应用场景

主要能够体现 解决数据库的访问压力。

例如:短信验证码时间有效期、session共享解决方案

Redis优势

性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。

丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。

原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。

丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。

Redis与其他key-value存储有什么不同?

Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。

Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

redis的下载和安装(先说windows版本的):

  1. https://redis.io/download或者https://github.com/MicrosoftArchive/redis/releases
  2. 下载解压以后,新建批处理文件start.bat 启动内容 redis-server.exe  redis.windows.confreids(缓存,reids下载,安装 测试)
  3. 启动成功,默认断山口6379 以上启动不是后台启动,关闭窗口 则直接关闭 redis了

  4. 测试 redis 在redis目录下找到redis-cli.exe 文件 双击 启动reids(缓存,reids下载,安装 测试)
  5. 修改密码 可以在redis.windows.conf文件中修改 自己所需要的密码 (注意不要有空格)reids(缓存,reids下载,安装 测试)
  6. 登录密码 AUTH 密码  我的是 auth redis123 ok表示登录成功

    reids(缓存,reids下载,安装 测试)

  7. 测试添加 获取数据

    reids(缓存,reids下载,安装 测试)

  8. windons下载安装测试redis 成功

  9. 分享关于缓存的一篇内容:原文:https://blog.csdn.net/zhengzhaoyang122/article/details/82184029

缓存穿透、缓存击穿、缓存雪崩和缓存刷新。

【1】、缓存穿透:缓存穿透是说收到一个请求,但是该请求缓存中不存在,只能去数据库中查询,然后放进缓存。但当有好多请求同时访问同一个数据时,业务系统把这些请求全发到了数据库;或者恶意构造一个逻辑上不存在的数据,然后大量发送这个请求,这样每次都会被发送到数据库,最总导致数据库挂掉。
     解决的办法:对于恶意访问,一种思路是先做校验,对恶意数据直接过滤掉,不要发送至数据库层;第二种思路是缓存空结果,就是对查询不存在的数据也记录在缓存中,这样就可以有效的减少查询数据库的次数。非恶意访问,结合缓存击穿说明。
    【2】、缓存击穿:上面提到的某个数据没有,然后好多请求查询数据库,可以归为缓存击穿的范畴:对于热点数据,当缓存失效的一瞬间,所有的请求都被下放到数据库去请求更新缓存,数据库被压垮。
      解决的办法:防范此类问题,一种思路是加全局锁,就是所有访问某个数据的请求都共享一个锁,获得锁的那个才有资格去访问数据库,其他线程必须等待。但现在大部分系统都是分布式的,本地锁无法控制其他服务器也等待,所以要用到全局锁,比如Redis的setnx实现全局锁。另一种思想是对即将过期的数据进行主动刷新,比如新起一个线程轮询数据,或者比如把所有的数据划分为不同的缓存区间,定期分区间刷新数据。第二个思路与缓存雪崩有点关系。
    【3】、缓存雪崩:缓存雪崩是指当我们给所有的缓存设置了同样的过期时间,当某一时刻,整个缓存的数据全部过期了,然后瞬间所有的请求都被抛向了数据库,数据库就崩掉了。
      解决的办法:解决思路要么是分治,划分更小的缓存区间,按区间过期;要么给每个key的过期时间加一个随机值,避免同时过期,达到错峰刷新缓存的目的。
    【4】、缓存刷新:既清空缓存 ,一般在insert、update、delete操作后就需要刷新缓存,如果不执行就会出现脏数据。但当缓存请求的系统蹦掉后,返回给缓存的值为null。