浅谈redis.缓存

redis是什么

redis是一个高性能的key-value数据库,它是完全开源免费的,而且redis是一个NOSQL类型数据库,是为了解决高并发、高扩展,大数据存储等一系列的问题而产生的数据库解决方案,是一个非关系型的数据库。但是,它也是不能替代关系型数据库,只能作为特定环境下的扩充。

redis是一个以key-value存储的数据库结构型服务器,它支持的数据结构类型包括:字符串(String)、链表(lists)、哈希表(hash)、集合(set)、有序集合(Zset)等。为了保证读取的效率,redis把数据对象都存储在内存当中,它可以支持周期性的把更新的数据写入磁盘文件中。而且它还提供了交集和并集,以及一些不同方式排序的操作。

redis的优势和特点:

1、redis数据读写速度非常快,因为它把数据都读取到内存当中操作,而且redis是用C语言编写的,是最“接近“”操作系统的语言,所以执行速度相对较快。

2、redis虽然数据的读取都存在内存当中,但是最终它是支持数据持久化到磁盘当中。

3、redis提供了丰富的数据结构。

4、redis的所有操作都是原子性,支持事务,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行。

5、redis支持主从复制,主机会自动将数据同步到从机,可以进行读写分离。

redis的应用场景:

1、redis由于数据的读取和操作都在内存当中操作,读写的效率较高,所以经常被用来做数据的缓存。把一些需要频繁访问的数据,而且在短时间之内不会发生变化的,放入redis中进行操作。从而提高用户的请求速度和降低网站的负载,降低数据库的读写次数,就把这些数据放到缓存中。

2、一些常用的实时计算的功能。需要实时变化和展示的功能,就可以把相关数据放在redis中进行操作。大大提高效率。

3、消息队列,经常用来构建类似实时聊天系统的功能,大大提高应用的可用性。

Redis最为常用的数据类型主要有以下五种:

  • String

  • Hash

  • List

  • Set

  • Sorted set

怎么使用redis?     

 //0.创建池子的配置对象
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        //最大空闲时间
        poolConfig.setMaxIdle(30);
        poolConfig.setMinIdle(10);
        //最大连接数
        poolConfig.setMaxTotal(50);
         
        //1.创建一个redis的连接池
        JedisPool pool = new JedisPool(poolConfig,"192.168.79.128", 6379);
         
        //2.从池子中获取redis的连接资源
        Jedis jedis = pool.getResource();
         
        //3.操作数据库
        jedis.set("xxx", "yyy");
        System.out.println(jedis.get("xxx"));
         
        //4.关闭资源
        jedis.close();
        pool.close();

 

 

1.1        集群的概念

所谓的集群,就是通过添加服务器的数量,提供相同的服务,从而让服务器达到一个稳定、高效的状态。

1.1.1       使用redis集群的必要性

问题:我们已经部署好了redis,并且能启动一个redis,实现数据的读写,为什么还要学习redis集群?

答:(1)单个redis存在不稳定性。当redis服务宕机了,就没有可用的服务了。

(2)单个redis的读写能力是有限的。

总结:redis集群是为了强化redis的读写能力。

1.1.2       如何学习redis集群

--说明:(1)redis集群中,每一个redis称之为一个节点。

      (2)redis集群中,有两种类型的节点:主节点(master)、从节点(slave)。

      (3)redis集群,是基于redis主从复制实现。

主从模式是三种模式中最简单的,在主从复制中,数据库分为两类:主数据库(master)和从数据库(slave)。

其中主从复制有如下特点:

* 主数据库可以进行读写操作,当读写操作导致数据变化时会自动将数据同步给从数据库

* 从数据库一般都是只读的,并且接收主数据库同步过来的数据

* 一个master可以拥有多个slave,但是一个slave只能对应一个master

* slave挂了不影响其他slave的读和master的读和写,重新启动后会将数据从master同步过来

* master挂了以后,不影响slave的读,但redis不再提供写服务,master重启后redis将重新对外提供写服务

* master挂了以后,不会在slave节点中重新选一个master

 

假设集群有两个主节点 A,B。


1.节点 A 有一个从节点A1 。节点 B 有两个从节点:B1 和 B2。
2.主节点 B 失效。B1 被提升为主节点。
3.节点 B2 迁移成为节点 A1 的从节点,要不然 A1 就没有任何从节点。
4.三个小时后节点 A1 也失效了。
5.节点 B2 被提升为取代 A1 的新主节点。
集群仍然能继续正常工作。选新备机的方法:找备机最多的主要

1.1        特点

(1)主节点Master可读、可写.

(2)从节点Slave只读。(read-only)

因此,主从模型可以提高读的能力,在一定程度上缓解了写的能力。因为能写仍然只有Master节点一个,可以将读的操作全部移交到从节点上,变相提高了写能力。

Redis集群至少需要3个master节点

其结构特点:
1、所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。
2、节点的fail是通过集群中超过半数的节点检测失效时才生效。
3、客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。
4、redis-cluster把所有的物理节点映射到[0-16383]slot上(不一定是平均分配),cluster 负责维护node<->slot<->value。
5、Redis集群预分好16384个桶,当需要在 Redis 集群中放置一个 key-value 时,根据 CRC16(key) mod 16384的值,决定将一个key放到哪个桶中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值