jedis

SpringBoot 整合 jedis

混江龙づ霸主 提交于 2020-01-22 04:56:42
常用的redis客户端介绍以及对比 Jedis api 在线网址:http://tool.oschina.net/uploads/apidocs/redis/clients/jedis/Jedis.html redisson 官网地址:https://redisson.org/ redisson git项目地址:https://github.com/redisson/redisson lettuce 官网地址:https://lettuce.io/ lettuce git项目地址:https://github.com/lettuce-io/lettuce-core 首先,在spring boot2之后,对redis连接的支持,默认就采用了lettuce。这就一定程度说明了lettuce 和Jedis 的优劣。 概念 Jedis:是老牌的Redis的Java实现客户端,提供了比较全面的Redis命令的支持, Redisson:实现了分布式和可扩展的Java数据结构。 Lettuce:高级Redis客户端,用于线程安全同步,异步和响应使用,支持集群,Sentinel,管道和编码器。 优点 Jedis:比较全面的提供了Redis的操作特性 Redisson:促使使用者对Redis的关注分离,提供很多分布式相关操作服务,例如,分布式锁,分布式集合,可通过 Redis支持延迟队列

Spring Boot整合Redis

会有一股神秘感。 提交于 2020-01-21 21:27:00
目录 1.spring-data-redis项目简介 1.1 spring-data-redis项目的设计 1.2 RedisTemplate 1.3 Spring对Redis数据类型操作的封装 1.4 SessionCallback和RedisCallback 2.Spring Boot中配置和使用Redis 2.1 配置Redis 2.2 操作Redis数据类型 2.2.1 字符串和散列的操作 2.2.2 列表操作 2.2.3 集合操作 2.3 Redis的特殊用法 2.3.1 Redis事务 2.3.2 Redis流水线 2.3.3 Redis发布订阅 2.3.4 使用Lua脚本 在现今互联网应用中,NoSql已经广泛应用,在互联网中起到加速系统的作用。有两种NoSQL使用最为广泛,那就是Redis和MongoDB。 Redis是一种运行在内存的数据库,支持7种数据类型的存储。Redis的运行速度很快,大约是关系数据库几倍到几十倍的速度。如果我们将常用的数据存储在Redis中,用来代替关系数据库的查询访问,网站性能将可以得到大幅提高。在现实中,查询数据要远远大于更新数据,一般一个正常的网站查询和更新的比例大约是1:9到3:7,在查询比例较大的网站使用Redis可以数倍地提升网站的性能。 Redis自身数据类型比较少,命令功能也比较有限,运算能力一直不强,所以在Redis2

Memcached、Redis OR Tair

痞子三分冷 提交于 2020-01-21 03:43:38
一、前言   非关系型数据库(NoSQL = Not Only SQL)的产品非常多,常见的有Memcached、Redis、MongoDB等优秀开源项目,相关概念和资料网上也非常丰富,不再重复描述,本文主要引入Memcached和Redis与淘宝开源Tair分布式存储进行对比测试,由于各自适用场景不同,且每个产品的可配置参数繁多, 涉及缓存策略、分布算法、序列化方式、数据压缩技术、通信方式、并发、超时等诸多方面因素,都会对测试结果产生影响 ,单纯的性能对比存在非常多的局限性和不合理性,所以不能作为任何评估依据,仅供参考,加深对各自产品的理解。以下是一些基本认识:   1、尽管 Memcached 和 Redis 都标识为Distribute,但从Server端本身而言它们并不提供分布式的解决方案,需要Client端实现一定的分布算法将数据存储到各个节点,从而实现分布式存储,两者都提供了Replication功能(Master-Slave)保障可靠性。   2、Tair 则本身包含 Config Server 和 Data Server 采用一致性哈希算法分布数据存储,由ConfigSever来管理所有数据节点,理论上服务器端节点的维护对前端应用不会产生任何影响,同时数据能按指定复制到不同的DataServer保障可靠性,从Cluster角度来看属于一个整体Solution

Redis分布式锁的实现

Deadly 提交于 2020-01-20 19:04:22
Redis分布式锁的实现 来自 https://www.cnblogs.com/Eugene-Jin/p/10801260.html 1.概述 分布式锁一般有三种实现方式:1.基于数据库实现分布式锁;2. 基于缓存(Redis,memcached,tair)实现分布式锁; 3.基于Zookeeper实现分布式锁。本片博客将介绍基于缓存实现分布式锁,这里主讲分别针对Redis 2.6.12 之前版本和Redis 2.6.12 及之后版本分布式锁的实现。 2.基于Redis(Redis 2.6.12版本之前)分布式锁的实现方式 (1)命令介绍   1)SETX    SETNX key value: setnx是『set if not exists』(即当key不存在时,则set)的简写。setnx具有原子性,当且仅当key不存在时,set一个key为val的字符串,返回1;若key存在,则什么都不做,返回0.   2)GETSET   GETSET key value: 将给定 key 的值设为 value ,并返回 key 的旧值(old value)。当 key 存在但不是字符串类型时,返回一个错误。当 key 没有旧值时,也即是, key 不存在时,返回 nil 。   3)GET   GET key: 返回 key 所关联的字符串值;如果 key 不存在那么返回特殊值 nil

java调用redis的多种方式与心得

怎甘沉沦 提交于 2020-01-20 10:57:51
心得: /** * 心得: * 1.连接方式主要有:直连同步,直连事务,直连管道,直连管道事务,分布式直连同步,分布式直连管道,分布式连接池同步,分布式连接池管道; * 2.同步方式会返回数据库执行结果,管道则不会返回数据库执行结果; * 3。管道分两种执行方式:有返回命令执行结果,无返回命令执行结果; * 4.返回数据库执行结果 与 返回命令执行结果 不是一个东西; * 5一般管道的无返回命令执行结果 的执行方式会比 有返回结果的方式快一点点,,但是在分布式连接池的测试里则得出相反的结果, * 因此,这两种管道方式的速度差距不大,按使用需求即可。 */测试源码 * redis几种调用方法 */ /** * 普通直连同步写入操作,于myRedis方法一样,都是单实例方法 * * 同步执行,会返回执行结果 * 写入10万行字符串 */ @org.junit.Test public void r1() { Jedis jedis = new Jedis("127.0.0.1", 6379); //密码,如果服务器没有密码,则会报错,因此,要对用使用 //jedis.auth("admin"); long start = System.currentTimeMillis(); for (int i = 0; i < 100000; i++) { //返回的是个字符串 String res

基于Lua脚本实现Redis分布式锁(乐观锁)

大兔子大兔子 提交于 2020-01-20 10:29:25
使用redis调用lua脚本实现原子性操作 如果对redis提供的指令集不满足 可以通过lua脚本执行自定义操作来保证执行的原子性,比如实现将匹配 key 和删除 key 合并在一起执行等。 Redis 服务器会单线程原子性执行 lua 脚本,保证 lua 脚本在处理的过程中不会被任意其它请求打断。 public class RedisLock { private JedisTemplate jedisTemplate = SpringContextHolder.getBean(JedisTemplate.class); private static final Logger logger = LoggerFactory.getLogger(RedisLock.class); private final static String REDIS_PREFIX = "redis_prefix_"; private final static String NX = "NX"; private final static String PX = "PX"; private final static String OK = "OK"; /** * 超时时间 * 默认1秒 */ private Integer timeout = 1_000; private String lockName; /

使用jedis连接redis

╄→гoц情女王★ 提交于 2020-01-19 07:58:26
1、导入jar包,添加pom依赖 <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency> 2、测试连接 public static void main(String[] args) { Jedis jedis = new Jedis("192.168.33.128",6379); jedis.auth("123456"); System.out.println(jedis.ping()); jedis.close(); } 3、连接异常 Exception in thread "main" redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: connect timed out at redis.clients.jedis.Connection.connect(Connection.java:207) at redis.clients.jedis.BinaryClient.connect(BinaryClient.java:93) at redis.clients.jedis

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

…衆ロ難τιáo~ 提交于 2020-01-19 04:36:15
继上一篇 使用jedis连接redis-cluster进行字符串数据结构api演示 之后的第二章节。本章内容讲解使用jedis连接redis-cluster进行list列表数据结构api演示。 package com . coderman . jedis . clusterdemo ; import com . alibaba . fastjson . JSON ; import org . junit . Test ; import java . util . List ; import java . util . Random ; /** * @Author fanchunshuai * @Date 2019/12/30 10 * @Description: * redis list api操作 */ public class ListAPITest extends ClusterTest { private static final String DEPART_KEYS = "XXJS:DEPART" ; /** * 右侧插入 */ @Test public void testAddRPush ( ) { String key = DEPART_KEYS + ":ID" ; //list 右侧插入5条,返回总共条数 //Long result = cluster.rpush

深入解析Jedis底层源码

与世无争的帅哥 提交于 2020-01-18 06:40:05
第1章 访问缓存服务器过程(hget) 架构在jedis外层封装了一个客户端ClusterNativeClient,在这个类中,提供了很多访问redis的方法,包括:hget、hset、hdel等,即成为前台业务代码和jedis进行交互的桥梁。 我们以查询操作为例,详细描述一下jedis的实现过程。 1.1 源码分析 1.1.1 ClusterNativeClient中hget方法: public String hget(String key, String field) { return pool.hget(key, field); } 说明: Pool是缓存初始化时建立的,我们后面详细讲。 public static void init(Properties props) { String[] servers = props.getProperty(“host”).split(","); HashSet nodes = new HashSet(); for (String s : servers) { String[] ipAndPort = s.split("😊; String ip = ipAndPort[0]; int port = Integer.valueOf(ipAndPort[1]).intValue(); nodes.add(new HostAndPort(ip

jedis访问redis学习笔记

只愿长相守 提交于 2020-01-18 05:13:55
最近在学习redis,在网上查了些文章,利用他人已有的知识,总结写下了这篇文章,大部分内容还是引用别人的文章内容。经过测试发现spring-data-redis现在有的版本只能支持reids 2.6和2.8版本,更高版本尚未支持。还是直接使用jedis比较灵活。 redis redis安装 redis的安装过程在以前的博文中已经详细介绍 linux下安装redis并自启动 jedis jedis下载地址:https://github.com/xetorthio/jedis jedis社区地址:https://groups.google.com/forum/#!forum/jedis_redis 最简单的Jedis访问redis jedis官方示例 1、键值读取 Jedis jedis = new Jedis("redis服务器ip地址", 6379); jedis.set("foo", "123456"); String value = jedis.get("foo"); System.out.println("____________value="+value); 2、集群读取 Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>(); //Jedis Cluster will attempt to