jedis

使用jedis连接redis-cluster模拟缓存击穿,穿透,雪崩场景

放肆的年华 提交于 2020-02-03 03:52:48
上一篇演示了通过redis实现ID生成器,本篇模拟缓存击穿,穿透,雪崩的场景。 package com . coderman . jedis . clusterdemo . hack ; import com . coderman . jedis . clusterdemo . ClusterTest ; import org . junit . Test ; /** * @Author fanchunshuai * @Date 2020/1/31 15 * @Description: * * 缓存穿透: * 参考 https://mp.weixin.qq.com/s?__biz=MzU0MDEwMjgwNA==&mid=2247486705&idx=2&sn=33f90d9606ad32384d351a2cc170ba2d&chksm=fb3f150acc489c1c967f2bb250d14c3e44d4f4f2dff6991f8315043ca247819b3bfd973650ef&mpshare=1&scene=1&srcid=&sharer_sharetime=1579147583247&sharer_shareid=9c9dad852994f99c77b36e07bf5e0634&key

YCSB项目学习

坚强是说给别人听的谎言 提交于 2020-02-02 13:35:30
主要总结Yahoo的数据库测试项目YCSB的使用(针对redis)。 github网址: https://github.com/brianfrankcooper/YCSB 需要安装 java maven 直接下载编译好的版本(不推荐) 123 curl -O --location https://github.com/brianfrankcooper/YCSB/releases/download/0.15.0/ycsb-0.15.0.tar.gztar xfvz ycsb-0.15.0.tar.gzcd ycsb-0.15.0 使用java或者maven编译 123456 git clone http://github.com/brianfrankcooper/YCSB.gitcd YCSB 只安装redis测试部分mvn -pl com.yahoo.ycsb:redis-binding -am clean package 安装全部测试功能mvn clean package 概述 详细说明: https://github.com/brianfrankcooper/YCSB/wiki/Running-a-Workload 运行workload一共有六个部分 设置数据库 选择合适的DB interface 选择合适的负载 选择合适的runtime parameters

Redis分布式锁的正确实现方式

妖精的绣舞 提交于 2020-02-01 05:17:09
转载至:https://www.cnblogs.com/linjiqin/p/8003838.html 前言 分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于ZooKeeper的分布式锁。本篇博客将介绍第二种方式,基于Redis实现分布式锁。虽然网上已经有各种介绍Redis分布式锁实现的博客,然而他们的实现却有着各种各样的问题,为了避免误人子弟,本篇博客将详细介绍如何正确地实现Redis分布式锁。 可靠性 首先,为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下四个条件: 互斥性。在任意时刻,只有一个客户端能持有锁。 不会发生死锁。即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁。 具有容错性。只要大部分的Redis节点正常运行,客户端就可以加锁和解锁。 解铃还须系铃人。加锁和解锁必须是同一个客户端,客户端自己不能把别人加的锁给解了。 代码实现 组件依赖 首先我们要通过Maven引入Jedis开源组件,在pom.xml文件加入下面的代码: <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency> 加锁代码 正确姿势 Talk is

Redis客户端

夙愿已清 提交于 2020-01-31 16:45:56
自带命令行客户端 命令格式 ./redis-cli -h 127.0.0.1 -p 6379 修改 redis配置文件 (解决 IP绑定问题) # bind 127. 0.0.1 绑定的 IP才能访问redis服务器,注释掉该配置 protected-mode yes 是否开启保护模式 , 由 yes该为no l 默认方式 如果不指定主机和端口也可以 ./redis-cli * 默认主机地址是 127.0.0.1 * 默认端口是 6379 连接超时解决 远程连接 redis服务,需要关闭或者修改防火墙配置。 修改防火墙设置: 第一步:编辑 iptables vim /etc/sysconfig/iptables 在命令模式下,选定要复制的那一行的末尾,然后点击键盘 yyp,就完成复制,然后修改 l 第二步:重启防火墙 service iptables restart iptables:清除防火墙规则: [确定] iptables:将链设置为政策 ACCEPT:filter [确定] iptables:正在卸载模块: [确定] iptables:应用防火墙规则: [确定]   多 数据库支持 默认一共是 16 个数据库,每个数据库之间是 相互隔离 (但是可以使用 flushall一次清空所有的库) 。数据库的数量是在 redis.conf中配置的。   切换数据库使用命令

SpringBoot中使用Redis的问题

假装没事ソ 提交于 2020-01-31 02:50:28
Jedis,Redisson,Lettuce的区别 redis三个连接客户端框架的选择:Jedis,Redisson,Lettuce MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persi… 关闭bgsave 设置bgsave 来源: CSDN 作者: Whaleson 链接: https://blog.csdn.net/Dreamlate_Spider/article/details/104115246

Jedis

大憨熊 提交于 2020-01-31 00:53:17
Java客户端 Jedis   Jedis: 一款java操作redis数据库的工具.   使用步骤:     1. 下载jedis的jar包     2. 使用       //1. 获取连接       Jedis jedis = new Jedis("localhost",6379);       //2. 操作       jedis.set("username","zhangsan");       //3. 关闭连接       jedis.close();       Jedis操作各种redis中的数据结构         1) 字符串类型 string           set           get         2) 哈希类型 hash : map格式           hset           hget           hgetAll         3) 列表类型 list : linkedlist格式。支持重复元素           lpush / rpush           lpop / rpop           lrange start end : 范围获取         4) 集合类型 set : 不允许重复元素           sadd           smembers:获取所有元素         5)

Redis中使用lua脚本

时光毁灭记忆、已成空白 提交于 2020-01-29 21:43:30
1.问题 原子性问题 Redis虽然是单线程的,但是仍然可能会出现线程安全问题,当然这个线程安全问题不是来源于Redis服务器内部,而是多个客户端去操作Redis的时候,多个客户端的操作就相当于同一个进程下的多个线程,如果多个客户端之间没有做好同步策略,就会产生数据不一致的问题。比如: 我想按照顺序执行几个Redis命令,但是多个客户端的命令之间没有做请求同步,导致实际执行顺序与预想的不一致,最终的结果也就无法满足原子性。 执行效率问题 Redis由于是基于内存的数据库,它本身的吞吐量是非常高的,那么影响Redis吞吐量的一个重要因素是网络,我们用redis实现某些特定功能,很可能需要用多个命令、多个数据类型、多个步骤一起才能完成功能,那么在实现这个功能的过程中,就会产生多次对Redis的网络访问,多次向Redis发送和获取数据,这种多次网络请求对性能影响是非常大的。当然我们可以使用连接池、pipeline管道操作,但是它们有一定的局限性和应用场景,如果我们能将一系列的对redis的操作变成一次操作,那会大大地减少网络请求,提升效率; Lua语言 Lua是一个高效的轻量级脚本语言 (javascript、shell、sql、perl、python),用标准C语言编写并以源代码形式开放,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能;

redis 初步了解

最后都变了- 提交于 2020-01-29 01:28:02
1.连接redis 通过java操作 1.首先 导入redis驱动 <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency> 2.连接redis通过jedis 2.创建redis连接池 连接redis通过 jedis 相当于HTTPclient 1.创建单例模式的方法 在调用的时候被创建 2.创建私有静态 jedisPool 3. 创建私有类 创建静态代码块 放入连接池的基本配置 4.有 最大连接数 最大空闲书 最小空闲连接数 5. 创建连接redis对象jedis 6.创建一个向外提供 从连接池拿值得方法 7.再创建一个向外提供使用完连接 归还连接的方法 8.创建工具类 将set hash 进行方法封装 归还连接 代码 public class RedisPool { //创建jedis 使用单例模式 JedisPool的配置参数大部分是由JedisPoolConfig的对应项来赋值的。 private static JedisPool jedisPool; private RedisPool(){} static { //连接池基本配置 JedisPoolConfig 是为了缓存连接,减少建立连接的次数

jedis非线程安全

五迷三道 提交于 2020-01-28 13:35:11
网上都说jedis实例是非线程安全的,常常通过JedisPool连接池去管理实例,在多线程情况下让每个线程有自己独立的jedis实例,但都没有具体说明为啥jedis实例时非线程安全的,今天就让我们一探究竟吧! 1. jedis类图 jedis_note.png 2. 为什么jedis不是线程安全的? 由上述类图可知,Jedis类中有RedisInputStream和RedisOutputStream两个属性,而发送命令和获取返回值都是使用这两个成员变量,显然,这很容易引发多线程问题。测试代码如下: public class BadConcurrentJedisTest { private static final ExecutorService pool = Executors.newFixedThreadPool(20); private static final Jedis jedis = new Jedis("192.168.58.99", 6379); public static void main(String[] args) { for(int i=0;i<20;i++){ pool.execute(new RedisSet()); } } static class RedisSet implements Runnable{ @Override public void

使用jedis连接redis-cluster进行set数据结构api演示

心不动则不痛 提交于 2020-01-28 11:05:06
继上一篇 使用jedis连接redis-cluster进行zset数据结构api演示 之后的第五章节。本章内容讲解使用jedis连接redis-cluster进行set数据结构api演示。 package com . coderman . jedis . clusterdemo ; import com . alibaba . fastjson . JSON ; import org . junit . Test ; import java . util . Set ; /** * @Author fanchunshuai * @Date 2020/1/3 18 * @Description: * set api测试 */ public class SetAPITest extends ClusterTest { /** * 重复运行两遍 * 添加集合元素 */ @Test public void testAddSet ( ) { //用户1认识的朋友 String key = "user:1:friends" ; String [ ] members = new String [ 10 ] ; members [ 0 ] = "zhangsna" ; members [ 1 ] = "lisi" ; for ( int i = 2 ; i < 10 ; i ++ ) {