zoukankan      html  css  js  c++  java
  • 三、redis的几种常见客户端及Sharding机制

    1、redis的几种常见客户端:
        Jedis:是Redis的Java实现客户端,提供了比较全面的Redis命令的支持;
        Redisson:实现了分布式和可扩展的Java数据结构。
     Lettuce:高级Redis客户端,用于线程安全同步,异步和响应使用,支持集群,Sentinel,管道和编码器。
        1)优点:
      Jedis:比较全面的提供了Redis的操作特性
      Redisson:促使使用者对Redis的关注分离,提供很多分布式相关操作服务,例如,分布式锁,分布式集合,可通过Redis支持延迟队列
      Lettuce:主要在一些分布式缓存框架上使用比较多
        2)可伸缩:
        Jedis:使用阻塞的I/O,且其方法调用都是同步的,程序流需要等到sockets处理完I/O才能执行,不支持异步。Jedis客户端实例不是线程安全的,所以需要通过连接池来使用Jedis。
        Redisson:基于Netty框架的事件驱动的通信层,其方法调用是异步的。Redisson的API是线程安全的,所以可以操作单个Redisson连接来完成各种操作
        Lettuce:基于Netty框架的事件驱动的通信层,其方法调用是异步的。Lettuce的API是线程安全的,所以可以操作单个Lettuce连接来完成各种操作
    2、redis的Sharding机制与技术:
        1) Sharding机制:即通常所说的“分片”,允许数据存放在不同的物理机器上,以适应数据量过大的场景,克服单台机器内存或者磁盘空间的限制。
        而这种“离散式”地存放,对客户端来说是透明的,对客户端来讲,完全看不到这种差别。
        2) Redis的分片(Sharding或者Partitioning)技术:是指将数据分散到多个Redis实例中的方法,分片之后,每个redis拥有一部分原数据集的子集。
        在数据量非常大时,这种技术能够将数据量分散到若干主机的redis实例上,进而减轻单台redis实例的压力。分片技术能够以更易扩展的方式使用多台计算机的存储能力(这里主要指内存的存储能力)
        和计算能力:
        a.从存储能力的角度,分片技术通过使用多台计算机的内存来承担更大量的数据,如果没有分片技术,那么redis的存储能力将受限于单台主机的内存大小。
        b.从计算能力的角度,分片技术通过将计算任务分散到多核或者多台主机中,能够充分利用多核、多台主机的计算能力。

    3、redis 中的分布式缓存-ShardedJedis
     ShardedJedis是通过一致性哈希来实现分布式缓存的,通过一定的策略把不同的key分配到不同的redis server上,达到横向扩展的目的。ShardedJedis的使用方法除了配置时有点区别,其他和Jedis基本类似,有一点要注意的是 ShardedJedis不支持多命令操作,像mget、mset、brpop等可以在redis命令后一次性操作多个key的命令,具体包括哪些,可以查看Jedis下的 MultiKeyCommands 这个类,这里面就包含了所有的多命令操作。值得注意的是Redis作者已经把这些命令从ShardedJedis过滤掉了,使用时也调用不了这些方法。
     思考:ShardedJedis去查一个key的整个思路是什么?
       1)当我们使用ShardedJedis去查一个key时,首先它会把这个key进行一个hash算法
       2)根据这个hash值然后去TreeMap<Long, S> nodes中(其将每台服务器节点采用hash算法划分为160个虚拟节点(可以配置划分权重)),查出这个key落在哪个实例中,并返回redis实例对应的具体信息
       3)根据这个redis的实例信息,得到一个保存jedis链接和实例信息对应关系的 Map<ShardInfo<R>, R> resources = new LinkedHashMap<ShardInfo<R>, R>(); 中找到这个jedis连接
       4)通过3)中返回的jedis连接,执行对象的命令操作(到这步后实际上和单机操作一样了)
      备注:在存入数据时 对Key or KeyTag 采用同样的hash算法,然后从TreeMap获取大于等于键hash值得节点,取最邻近节点存储;当key的hash值大于虚拟节点hash值得最大值时,存入第一个虚拟节点。sharded采用的hash算法:MD5 和 MurmurHash两种;默认采用64位的MurmurHash算法;
    4、缓存客户端与服务器:
        redis是开源的缓存软件,jedis是java连接redis的客户端jar包
        zedis是sn在redis 2.8版本上进行修改定制的缓存服务器软件
        sedis是sn在jedis版本上定制的缓存客户端软件

  • 相关阅读:
    责任链模式(Chain)
    适配器模式(Adapter)
    为什么你不应该读大学
    【JMedia】诺贝尔奖得主:东亚教育浪费了太多生命
    用IDEA/WebStrom 提交本地项目到Git/码云等
    requireJs 踩的坑
    pjax 笔记
    PHP 环境搭建及zabbix安装遇到的一些坑.
    div流加载
    spring data jpa 学习笔记
  • 原文地址:https://www.cnblogs.com/jiarui-zjb/p/12635496.html
Copyright © 2011-2022 走看看