简单了解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是开源的缓存软件,jedis是java连接redis的客户端jar包
- zedis是sn在redis 2.8版本上进行修改定制的缓存服务器软件
- sedis是sn在jedis版本上定制的缓存客户端软件
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
Spring Boot Redis客户端远程操作实现过程解析
在Spring Boot 1.x中默认是Jedis作为客户端,但是在Spring Boot2.x后,默认就是Lettuce Redis的远程连接,默认是不支持的,需要手动开启 修改config文件: 注释掉bind:127.0.0.1 开启密码校验,去掉requireprass的注释 使用jedis客户端: jedis的GitHub地址:https://github.com/xetorthio/jedis 如何远程连接: //构造一个jedis对象 Jedis jedis=new Jedis("
-
Redis发布订阅和实现.NET客户端详解
前言 发布订阅在设计模式中也可以说是观察者模式,针对这个模式是处理对象间一对多的依赖关系的,当一个对象发生变化,其它依赖他的对象都要得到通知并更新. 然而它也有自己的缺点,就是当主题发生一系列的变化时,观察者都要做批量的更新,如果这样的更新成本很高,那么解决方法就是根据种类需求通知,而不能盲目的通知所有的观察者. 那针对这个缺点,一般的情况下,你没有需求谁订阅一个跟自己无关的消息推送呢?这也正好说明推送的消息需要整理而不能一窝蜂的什么消息都往一个通道里面抛,要分而治之,合理的设计发布通道的用途,
-
PHP Swoole异步Redis客户端实现方法示例
本文实例讲述了PHP Swoole异步Redis客户端实现方法.分享给大家供大家参考,具体如下: 使用版本:1.8.0及以上 使用条件: 1.开启async-redis php --ri swoole (如果没有开启,重新编译安装Swoole时加入 --enable-async-redis 相关文章:Linux下源码包安装Swoole及基本使用) 2.安装hiredis: CentOS yum install libhiredis-devel Ubuntu: apt install libhi
-
java客户端Jedis操作Redis Sentinel 连接池的实现方法
pom.xml配置 <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.0.2.RELEASE</version> </dependency> <dependency> <groupId>redis.clients<
-
.NET客户端实现Redis中的管道(PipeLine)与事物(Transactions)
序言 Redis中的管道(PipeLine)特性:简述一下就是,Redis如何从客户端一次发送多个命令,服务端到客户端如何一次性响应多个命令. Redis使用的是客户端-服务器模型和请求/响应协议的TCP服务器,这就意味着一个请求要有以下步骤才能完成:1.客户端向服务器发送查询命令,然后通常以阻塞的方式等待服务器相应.2.服务器处理查询命令,并将相应发送回客户端.这样便会通过网络连接,如果是本地回环接口那么就能特别迅速的响应,但是如果走外网,甚至外网再做一系列的层层转发,那就显的格外蛋疼.无论网
-
Redis的Python客户端redis-py安装使用说明文档
1.安装 redis-py是Redis key-value 数据库的 Python 接口,安装如下,后面我们会讲hiredis这个库 复制代码 代码如下: $ sudo pip install redis $ sudo pip install hiredis 2.入门 复制代码 代码如下: >>> import redis >>> pool = redis.ConnectionPool(host='localhost', port=6379, db=0) >>
-
Java客户端利用Jedis操作redis缓存示例代码
前言 Redis是一个开源的Key-Value数据缓存,和Memcached类似.Redis多种类型的value,包括string(字符串).list(链表).set(集合).zset(sorted set --有序集合)和hash(哈希类型). Jedis 是 Redis 官方首选的 Java 客户端开发包.下面就来给大家详细关于Java客户端利用Jedis操作redis缓存的相关内容,话不多说,直接来看示例代码吧. 示例代码: //连接redis ,redis的默认端口是6379 Jedis
-
Docker安装Redis并介绍可视化客户端进行操作
1 简介 Redis是使用ANSI C语言开发的基于Key-Value的高性能NoSQL数据库,在解决高并发.高可用等一系列问题中,它扮演着重要的角色.它的优势主要有: 速度快.持久化.原子性.数据结构丰富.多语言支持. 本文将简单介绍如何通过Docker安装Redis,并简单使用与操作. 2 Docker安装与使用 2.1 Docker安装 拉取Redis镜像,选择目前最新的稳定版本5.0.8: $ docker pull redis:5.0.8 建议配置成阿里云的镜像,速度会快很多.拉取成功
-
详解java 客户端链接不上redis解决方案
出现问题描述: 1.Could not get a resource from the pool, Connection refused: connect windows Java这边客户端链接被拒接了,想想问题 1.Vmware里面的Linux所安装的Redis已经正常启动 2.在windows用ssh客户端链接linux可以操作redis 3.linux防火墙已经关闭 4.拼linux的ip也能拼通 按理说应该没问题,下利用telnet测试下端口 telnet 192.168.0.104 6
-
简单了解redis常见客户端及Sharding机制原理
1.redis的几种常见客户端: Jedis:是Redis的Java实现客户端,提供了比较全面的Redis命令的支持; Redisson:实现了分布式和可扩展的Java数据结构. Lettuce:高级Redis客户端,用于线程安全同步,异步和响应使用,支持集群,Sentinel,管道和编码器. 1)优点: Jedis:比较全面的提供了Redis的操作特性 Redisson:促使使用者对Redis的关注分离,提供很多分布式相关操作服务,例如,分布式锁,分布式集合,可通过Redis支持延迟队列 Le
-
Redis常见分布锁的原理和实现
目录 前言 基于数据库 悲观锁 实现原理 具体实现 乐观锁 简介 实现原理 具体实现 Redis实现分布式锁 Zooker实现分布式锁 加锁过程 释放锁的过程 异常场景分析 具体实现 Zookpeer实现分布式锁实现库存扣减 总结 前言 Java中的锁主要包括synchronized锁和JUC包中的锁,这些锁都是针对单个JVM实例上的锁,对于分布式环境是无效的,那么基于分布式锁的如何实现呢? 常见的分布式锁的实现如下图: 基于数据库 悲观锁 悲观锁(Pessimistic Lock)顾名思义为很
-
Redis中主键失效的原理及实现机制剖析
作为一种定期清理无效数据的重要机制,主键失效存在于大多数缓存系统中,Redis 也不例外.在 Redis 提供的诸多命令中,EXPIRE.EXPIREAT.PEXPIRE.PEXPIREAT 以及 SETEX 和 PSETEX 均可以用来设置一条 Key-Value 对的失效时间,而一条 Key-Value 对一旦被关联了失效时间就会在到期后自动删除(或者说变得无法访问更为准确).可以说,主键失效这个概念还是比较容易理解的,但是在具体实现到 Redis 中又是如何呢?最近本博主就对 Redis
-
利用python实现简单的邮件发送客户端示例
脚本过于简单,供学习和参考.主要了解一下smtplib库的使用和超时机制的实现.使用signal.alarm实现超时机制. #!/usr/bin/env python # -*- coding: utf-8 -*- import time import sys import logging import smtplib import socket import signal import ConfigParser from datetime import datetime from email
-
.NET Core实现简单的Redis Client框架
目录 0,关于RedisRESP 1,定义数据类型 2,定义异步消息状态机 3,定义命令发送模板 4,定义RedisClient 5,实现简单的RESP解析 6,实现命令发送客户端 7,如何使用 8,更多客户端 9,更多测试 10,性能测试 0,关于 Redis RESP RESP 全称 REdis Serialization Protocol ,即 Redis 序列化协议,用于协定客户端使用 socket 连接 Redis 时,数据的传输规则. 官方协议说明:https://redis.io/
-
浅谈Redis中的自动过期机制
目录 Redis中的自动过期机制 一.使用Redis Key自动过期机制 二.SpringBoot整合key失效监听 Redis中的自动过期机制 实现需求:处理订单过期自动取消,比如下单30分钟未支付自动更改订单状态 1.使用Redis Key自动过期出发事件通知2.使用定时任务30分钟后检查3.按照每分钟轮训检查 CREATE TABLE `order_number` ( `id` int(11) NOT NULL AUTO_INCREMENT, `order_name` varchar(25
-
浅谈Redis常见延迟问题定位与分析
目录 使用复杂度高的命令 存储bigkey 集中过期 实例内存达到上限 fork耗时严重 绑定CPU 使用Swap 网卡负载过高 使用复杂度高的命令 如果在使用Redis时,发现访问延迟突然增大,如何进行排查? 首先,第一步,建议你去查看一下Redis的慢日志.Redis提供了慢日志命令的统计功能,我们通过以下设置,就可以查看有哪些命令在执行时延迟比较大. 首先设置Redis的慢日志阈值,只有超过阈值的命令才会被记录,这里的单位是微妙,例如设置慢日志的阈值为5毫秒,同时设置只保留最近1000条慢
-
Redis常见限流算法原理及实现
目录 前言 简介 固定时间窗口 原理 示例说明 优缺点 相关实现 限流脚本 具体实现 测试 滑动时间窗口 实现原理 示例说明 具体实现 漏桶算法 原理 具体实现 令牌桶算法 原理 具体实现 小结 总结 前言 在高并发系统中,我们通常需要通过各种手段来提供系统的可以用性,例如缓存.降级和限流等,本文将针对应用中常用的限流算法进行详细的讲解. 简介 限流简称流量限速(Rate Limit)是指只允许指定的事件进入系统,超过的部分将被拒绝服务.排队或等待.降级等处理. 常见的限流方案如下: 固定时间窗
-
Java网络编程之简单的服务端客户端应用实例
本文实例讲述了Java网络编程之简单的服务端客户端应用.分享给大家供大家参考.具体如下: 在Java中,我们使用java.net.Socket及其相关类来完成有关网络的相关功能.Socket类非常简单易用,因为Java技术隐藏了建立网络连接和通过连接发送数据的复杂过程.下面所说的内容只适用于TCP协议. 一.连接到服务器 我们可以使用Socket类的构造函数来打开一个套接字,如 Socket sk = new Socket("210.0.235.14",13); 其中,210.0.23
-
简单了解java等待唤醒机制原理及使用
这篇文章主要介绍了简单了解java等待唤醒机制原理及使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 这是一篇走心的填坑笔记,自学Java的几年总是在不断学习新的技术,一路走来发现自己踩坑无数,而填上的坑却屈指可数.突然发现,有时候真的不是几年工作经验的问题,有些东西即使工作十年,没有用心去学习过也不过是一个10年大坑罢了(真实感受). 刚开始接触多线程时,就知道有等待/唤醒这个东西,写过一个demo就再也没有看过了,至于它到底是个什么东西,
随机推荐
- Groovy编程入门攻略
- asp.net 中国身份证号码验证代码 非正则
- 零基础易语言入门教程(四)之数据类型
- mysql 启动1067错误及修改字符集重启之后复原无效问题
- IBM DB2 日常维护汇总(四)
- 使用vue.js2.0 + ElementUI开发后台管理系统详细教程(二)
- 史上最全最强SpringMVC详细示例实战教程(图文)
- js实现的二级横向菜单条实例
- js innerHTML 的一些问题的解决方法
- bootstrap 模态框(modal)实现水平垂直居中显示
- PHP在innodb引擎下快速代建全文搜索功能简明教程【基于xunsearch】
- 第七章之菜单按钮图标组件
- C语言基本排序算法之shell排序实例
- 实现JavaScript高性能的数据存储
- Javascript的无new构建实例详解
- jQuery中:visible选择器用法实例
- php mysql localhost,127.0.0.1和ip区别
- JavaScript实现弹出DIV层同时页面背景渐变成半透明效果
- IIS无法启动提示“服务没有及时响应启动或控制请求”的解决方法[图解]
- 使用JavaScript实现alert的实例代码