对Redis的认识

认知

  • 如何把一个技术点说清楚呢,这里我只能尽量给你呈现一个完整的Redis。
  • 什么是Redis?Redis是一个基于内存的非关系型数据库,以键值对进行存储的数据库,因为存储数据是在内存中,不是磁盘空间,所以大大的提升了读写速度,当然读相较于写速度更高,读的速度大概是10万级别/每秒,写的速度2万级别/每秒。
  • 使用场景?因为其强悍的读写速度,所以经常使用在缓存,抢票,用户登录信息存储等业务上。

具体使用
  • 1、构建Vmware虚拟机,安装Centos7,并根据Centos7进行clone两台,使用奇数台节点做一个Redis的主从复制,再clone克隆一台,当做哨兵。

  • 2、下载redis的安装包,ftp上传到4台机器上,分别解压,然后进入软件对应src目录进行编译make,安装install,vim编辑redis.conf配置文件,指定启动方式为后台启动。

  • 3、启动Redis-server,指定启动的配置文件Redis.con。查看是否启动成功 ps-ef |grep 6379,启动客户端Redis-cli

  • 4、R支持的5中数据类型,String,Hash,set,zset,list,鉴于java程序员,这几种数据类型与java中的哪些数据类型相对应呢?

    • String 对应Java中的String

      • 例如:设置:set name ‘zhaoxw’ 值,获取值get name,删除值del name,查询值keys * keys name 以及setnx name zhaoxw等
    • Hash对应java中的hashMap,具体解决的是存储一张二维数据表场景,每一个key对应一条记录,一条记录中有很多字段以及值,

      • 例如:Hset user name zhao,Hset user sex man,hmset key filed1 value1 … filedN valueN,hmget key filed1…fieldN等,当然二维表也可以将一条记录格式化为一个json串,然后以字符串的形式进行处理。
    • set与zset,set集合数据不可重复,zset支持不可重复性且有序,类似java中的栈先进后出。

      • 例如:一个桶先放进去的东西肯定是最后拿出来,这个是栈的概念,zadd name zhao,zadd sex man
    • list类似于java中队列的先进先出,支持先进去的数据先出来。

      • 例如:lpush key string,取出,可以做一个消息队列。类似于一个管道两边开口,先进去的肯定先出来.

    熟悉了mybatis的基本操作之后,至于通过java进行操作的话,只需要通过SpringMVC或者SpringBoot集成Redis的相关组件,具体是在pom.xml中引入相关依赖,参考redis提供给java的API就可以实现Redis在项目中的使用等,这些都是比较简单的想法。


Redis持久化
  • 什么是持久化呢?简而言之就是将内存中的数据持久化到机器磁盘空间,机器上的数据是以二进制存储的,Redis提供了两种持久话文件的机制,如何修改在redis.conf中进行修改
  • 一、快照的方式(以rdb的格式文件存储到src目录下默认是这个目录,可以修改,每次写所有的,数据量非常大的话,肯定会有很大磁盘Io,影响性能)
  • 二、添加日志方式(以aof的格式存储到src目录下默认是这个目录。可以修改 )
  • 三、默认是开启的是快照的方式,redis.conf 中 默认save 900 1 save 300 10 save 60 10000
    这种情况,存在数据丢失的情况,59秒变化了9999,redis意外宕机了,数据就算是丢失了。
    为了避免数据丢失,手动开启日志追加的方式,appedonly标签 默认no 修改为yes,默认是appendfsync everysec 每秒持久化一次默认推荐,除此之外,还有always 消耗性能,不推荐。

Redis主从复制
  • 一个主节点,两台从节点,主节点负责写,从节点负责读,关闭主节点的持久化,只放在从上进行数据持久化。
  • 创建很简单,只保持三台机器网络互通,然后在从reidis节点上的redis.conf配置文件中 配置:slaveof 192.168.1.1 6379 就可以了。
  • 启动:reids-cli 查看 info信息。就能看到信息。
哨兵机制
  • 这个很简单,简单的理解,就是在配置一个redis,这个节点只是当做一个哨兵使用,启动方式是一样的,指定配置文件sentinel.conf,哨兵机制是在主从复制的基础上的。
  • 当主节点挂了,内部实现了一个选举随机选举算法,会自动选举出来一个作为主节点。

虚拟内存淘汰机制
  • 有两种类型,一是针对设置了过期key值过期时间的,一种是没有设置过期key值的。

  • allkeys-lru:在主键空间中,优先移除最近未使用的key。

  • volatile-lru:在设置了过期时间的键空间中,优先移除最近未使用的key。

  • allkeys-random:在主键空间中,随机移除某个key。

  • volatile-random:在设置了过期时间的键空间中,随机移除某个key。

  • volatile-ttl:在设置了过期时间的键空间中,具有更早过期时间的key优先移除。

缓存穿透
  • 什么是缓存穿透?一般缓存系统都是通过缓存中的key去查找的,如果redis缓存中不存在,就应该去后台系统中从数据库中查找,如果某个key是的value是一定不存在,又对该key发送大量的查询请求就会造成后端系统的大量压力,这个就是缓存穿透,
  • 解决方案 redis中缓存空值,缓存时间设置短一点。
布隆过滤器
  • 就是一个大的二进制数组,判断数值是否已经存在的功能,redis对布隆过滤器进行了相关整合,直接判断要查询的值是否存在就可了。由于其极高的空间利用率,时间利用率解决了缓存穿透的问题。具体一点就是将查询的key放入布隆过滤器中,再次查询的判断布隆过滤器中是否存在,存在就返回,不存在直接废弃,不在查询数据库。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值