jedis

面试突击 | Redis 如何从海量数据中查询出某一个 Key?附视频

柔情痞子 提交于 2020-02-27 20:04:37
1 考察知识点 本题考察的知识点有以下几个: Keys 和 Scan 的区别 Keys 查询的缺点 Scan 如何使用? Scan 查询的特点 2 解答思路 Keys 查询存在的问题 Scan 的使用 Scan 的特点 3 Keys 使用相关 1)Keys 用法如下 2)Keys 存在的问题 此命令没有分页功能,我们只能一次性查询出所有符合条件的 key 值,如果查询结果非常巨大,那么得到的输出信息也会非常多; keys 命令是遍历查询,因此它的查询时间复杂度是 o(n),所以数据量越大查询时间就越长。 4 Scan 使用相关 我们先来模拟海量数据,使用 Pipeline 添加 10w 条数据,Java 代码实现如下: import redis.clients.jedis.Jedis; import redis.clients.jedis.Pipeline; import utils.JedisUtils; public class ScanExample { public static void main(String[] args) { // 添加 10w 条数据 initData(); } public static void initData(){ Jedis jedis = JedisUtils.getJedis(); Pipeline pipe = jedis

rabbitmq系列(三)消息幂等性处理

这一生的挚爱 提交于 2020-02-27 06:51:06
一、springboot整合rabbitmq 我们需要新建两个工程,一个作为生产者,另一个作为消费者。在pom.xml中添加amqp依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> 在application.yml文件中添加rabbitmq的相关信息: spring: rabbitmq: # 连接地址 host: 127.0.0.1 # 端口 port: 5672 # 登录账号 username: guest # 登录密码 password: guest # 虚拟主机 virtual-host: / 在生产者工程中新建配置项rabbitmqConfig.java,申明名称为”byte-zb“直连交换机和队列,使用”byte-zb“的routing-key将队列和交换机绑定,代码如下: @Configuration public class RabbitConfig { public static final String QUEUE_NAME = "byte-zb"; public static final String EXCHANGE_NAME = "byte-zb";

一文教你如何用Redis构建高性能锁

我的未来我决定 提交于 2020-02-26 23:32:33
前言 在这里粗略的说一下,zk锁性能比redis低的原因:zk中的角色分为leader,flower,每次写请求只能请求leader,leader会把写请求广播到所有flower,如果flower都成功才会提交给leader,其实这里相当于一个2PC的过程。在加锁的时候是一个写请求,当写请求很多时,zk会有很大的压力,最后导致服务器响应很慢。 正题: 什么情况下需要加锁? 当多个线程、用户同时竞争同一个资源时,需要加锁。比如,下订单减库存,抢票,选课,抢红包等。如果在此处没有锁的控制,会导致很严重的问题,下订单减库存的时候不加锁,会导致商品超卖;抢票的时候不加锁,会导致两个人抢到同一个位置;选课的时候没有锁的控制,导致选课成功的人数大于教室的座位数;抢红包时没有锁的控制,抢到红包的金额大于红包的实际金额。 什么是分布式锁? 学过JAVA多线程的朋友都知道,为了防止多个线程同时执行同一段代码,可以用synchronized关键字或JAVA API中ReentrantLock类来控制。 但是目前几乎任何一个系统都往往部署多台机器的,单机部署的应用很少,synchronized和ReentrantLock发挥不出任何作用,此时就需要一把全局的锁,来代替JAVA中的synchronized和ReentrantLock。 当Thread1线程获取到锁,执行锁中的代码

Redis两天精通

两盒软妹~` 提交于 2020-02-26 10:45:37
001.NoSql的概念.mp4 002.Redis简介.mp4 003.Redis安装环境准备.mp4 004.Linux环境安装Redis.mp4 005.Redis的启动和关闭.mp4 006.Redis的可视化客户端.mp4 007.Redis多实例安装.mp4 008.Redis数据类型概述.mp4 009.Redis之String类型.mp4 011.Redis之List类型.mp4 012.Redis之Set类型.mp4 013.Redis之SortedSet类型.mp4 014.Redis之通用的key操作命令.mp4 015.Jedis简介.mp4 016.Jedis连接Redis数据库.mp4 017.Jedis使用连接池方式连接Redis数据.mp4 018.Jedis之对key的操作.mp4 019.Jedis之对String类型操作.mp4 020.Jedis之对List类型操作.mp4 021.Jedis之对Set类型操作.mp4 022.Jedis之对Hash类型操作.mp4 023.Jedis之对集合排序.mp4 024.SpringDataRedis简介.mp4 025.SpringDataRedis环境搭建.mp4 026.SpringDataRedis操作String类型数据.mp4 027.SpringDataRedis操作Set类型数据

Redis哨兵技术(二)客户端访问哨兵系统

て烟熏妆下的殇ゞ 提交于 2020-02-26 02:11:01
1.代码示例 在介绍客户端的原理之前,先以Java客户端Jedis为例,演示一下使用方法:下面代码可以连接我们刚刚搭建的哨兵系统,并进行各种读写操作: public static void testSentinel() throws Exception { String masterName = "mymaster"; Set<String> sentinels = new HashSet<>(); sentinels.add("192.168.92.128:26379"); sentinels.add("192.168.92.128:26380"); sentinels.add("192.168.92.128:26381"); JedisSentinelPool pool = new JedisSentinelPool(masterName, sentinels); //初始化过程做了很多工作 Jedis jedis = pool.getResource(); jedis.set("key1", "value1"); pool.close(); } 2.客户端原理 Jedis客户端对哨兵提供了很好的支持。如上述代码所示,我们只需要向Jedis提供哨兵节点集合和masterName,构造Jedis SentinelPool对象;然后便可以像使用普通Redis连接池一样来使用了

springboot redisTemplate简单锁-简记

让人想犯罪 __ 提交于 2020-02-26 00:16:56
@Autowired private RedisTemplate<String, Object> redisTemplate; /** * 简单锁 10s */ @SuppressWarnings("ConstantConditions") private boolean sampleLock(String lockName){ return redisTemplate.execute((RedisCallback<Boolean>) redisConnection -> { Object obj = redisConnection.execute("set", getBytes("DS_REAL_FEE_LOCK_" + lockName), getBytes("lockIt"), getBytes("NX"), getBytes("EX"), getBytes("10")); return obj != null; }); } private byte[] getBytes(String obj){ return obj.getBytes(StandardCharsets.UTF_8); } 当spring boot集成redis但是又未引入jedis时,简单锁写法如上 当spring boot集成redis同时又引入了jedis时,简单锁写法如下 @Autowired

Reids基础知识

不想你离开。 提交于 2020-02-25 19:18:57
1. Redis:非关系型数据库(内存数据库),键值对形式,常用于缓存使用 2. 5种数据结构: 字符串:string Hash:键值对形式 Set:string类型的无序集合 List:一个每个子元素都是string类型的双向链表 Sortedset:和set一样sorted set也是string类型元素的集合,不同的是每个元素都会关联一个double类型的score。 3.Redis常用命令操作 字符串: 存储:set key value 获取:get key 删除:del key Hash类型: 存储:hset key field value 获取:hget key field hgetall key 删除:hdel key field 列表类型:从头还是尾操作数据,允许重复元素 添加: Lpush key value:将元素加入列表左边 Rpush key value:将元素加入列表右边 获取: Lrange key start end :范围获取 删除: Lpop:删除列表最左边的元素,并将元素返回 Rpop:删除列表最右边的元素,并将元素返回 Set: 存储:sadd key value1 value2 value3 获取:smembers key 获取集合中所有元素 删除:srem key value 删除集合中的某个元素 sortedset: 存储zadd key

Jedis客户端以及redis中的pipeline批量操作

眉间皱痕 提交于 2020-02-24 21:37:18
关注公众号:CoderBuff,回复“redis”获取《Redis5.x入门教程》完整版PDF。 《Redis5.x入门教程》目录 第一章 · 准备工作 第二章 · 数据类型 第三章 · ​命令 第四章 ​· 配置 第五章 · Java客户端(上) 第六章 · 事务 第七章 · 分布式锁 第八章 · Java客户端(下) 第五章 · Java客户端(上) 有关本章的源码: https://github.com/yu-linfeng/redis5.x_tutorial/tree/master/code/jedis 前面的章节介绍了redis的安装、还有命令配置等内容,我们在实际使用时大部分情况都是利用现成的Java客户端对redis进行操作。当然命令并不是没用,它极有可能在你排查问题时排上用场,因为你有可能会直接连入redis服务端通过命令行来排查是否是redis缓存的问题。 redis的Java客户端最常用的是 jedis 开源库,本章我们也将围绕jedis的对redis进行一些简单的操作,jedis的GitHub地址: https://github.com/xetorthio/jedis 。 package com.coderbuff.jedis.simple; import redis.clients.jedis.Jedis; /** * @author okevin *

Redis集群-官方推荐方案RedisCluster

本小妞迷上赌 提交于 2020-02-24 13:56:02
Redis集群-官方推荐方案RedisCluster 前情提要 理解RedisCluster的原理和容错机制 能够配置RedisCluster并使用 redis使用中遇到的瓶颈 我们日常工作中使用Redis,经常会遇到一些问题: 1、高可用问题,如何保证redis的持续高可用性。   2、容量问题,单实例redis内存无法无限扩充,达到32G后就进入了64位世界,性能下降。   3、并发性能问题,redis号称单实例10万并发,但也是有尽头的。 RedisCluster的原理和容错机制 redis的集群策略 redis3.0以后推出的redis cluster 集群方案,redis cluster集群保证了高可用、高性能、高可扩展性。 主要有下面三种集群策略,分别为: 推特:twemproxy : 代理式 豌豆荚:codis :代理式 官方:redis cluster : 非代理 我们主要来学习官方推出的 redis cluster,这也是生产项目中用的最多的。 redis-cluster的优势 1、官方推荐,毋庸置疑。   2、去中心化,集群最大可增加1000个节点,性能随节点增加而线性扩展。   3、管理方便,后续可自行增加或摘除节点,移动分槽等等。   4、简单,易上手。 redis-cluster名词介绍 1、master  主节点、   2、slave   从节点   3

Redis实现存取数据+数据存取

柔情痞子 提交于 2020-02-23 05:45:53
添加依赖: <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.7</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-redis --> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>2.1.3.RELEASE</version> </de Mapper接口: package com.nf147.sim.mapper; import com.nf147.sim.entity.News; import java.util.List; public interface NewsMapper { List<News> query(); void add(News news); } 映射文件: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE