查看“Jedis、Redisson与lettuce”的源代码
←
Jedis、Redisson与lettuce
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
[[category:Redis]] == 关于 == === Jedis === '''Jedis''' 是Java 实现的Redis 客户端,它的 API 提供了全面的类似于 Redis 原生命令的支持。'''相比于其他 Redis 封装框架更加原生'''。 特点: * Jedis 中的方法调用是比较底层的暴露的 Redis 的 API,也即 Jedis 中的 Java '''方法基本和 Redis 的 API 保持着一致''',了解 Redis 的 API,也就能熟练的使用 Jedis。 ** Jedis 仅支持基本的数据类型如:String、Hash、List、Set、Sorted Set。 ** 支持单机、哨兵、Cluster等部署模式,支持事务、pipeline(管道技术)、LUA脚本等。 * Jedis 使用'''阻塞的I/O'''('''BIO'''),且其方法调用都是'''同步'''的。(程序流需要等到 sockets 处理完I/O才能执行) * Jedis 客户端实例'''不是线程安全'''的,所以需要通过'''连接池'''来使用Jedis。 * 不支持读写分离,需要自己实现。 它的使用主要是使用 JedisPool: # 初始化: #: <syntaxhighlight lang="java" highlight=""> // 创建JedisPool所需的连接池配置 JedisPoolConfig poolConfig = new JedisPoolConfig(); // 最大连接数,默认8 poolConfig.setMaxTotal(1024); // 最大空闲数,默认8 poolConfig.setMaxIdle(100); // 是否启用pool的jmx管理功能, 默认true poolConfig.setJmxEnabled(true); // 创建JedisPool连接池 jedisPool = new JedisPool(poolConfig, HOST, PORT, TIMEOUT, PASSWORD); </syntaxhighlight> # demo: #: <syntaxhighlight lang="java" highlight=""> /** * 同步获取Jedis * @return */ public synchronized static Jedis getJedis(){ if(jedisPool != null){ //获取Jedis对象 Jedis jedis = jedisPool.getResource(); return jedis; } return null; } /** * 释放jedis资源 */ public static void releaseResource(Jedis jedis){ if( jedis !=null ){ jedis.close(); } } </syntaxhighlight> === Redisson === '''Redisson''' 实现了分布式和可扩展的Java数据结构,和Jedis相比,功能较为简单,不支持字符串操作,不支持排序、事务、管道、分区等Redis特性。 * Redisson 的宗旨是促进使用者对Redis的关注分离,从而让使用者能够将精力更集中地放在处理业务逻辑上。 特点: * 提供'''分布式锁'''等常见的'''操作封装''',并实现了分布式和可扩展的Java数据结构,但'''不支持一些基础的 Redis 原生功能'''。 ** Redisson 不仅提供了一系列的分布式 Java 常用对象,基本可以与 Java 的基本数据结构通用,还提供了许多'''分布式服务''',其中包括(BitSet, Set, Multimap, SortedSet, Map, List, Queue, BlockingQueue, Deque, BlockingDeque, Semaphore, Lock, AtomicLong, CountDownLatch, Publish / Subscribe, Bloom filter, Remote service, Spring cache, Executor service, Live Object service, Scheduler service)。 ** 不支持事务操作,可以使用 LUA 脚本实现。 * 基于 '''Netty''' 实现,采用'''非阻塞的I/O'''('''AIO'''),性能高,支持异步的请求。 * Redisson 的 API 是'''线程安全'''的,所以可以操作单个 Redisson 连接来完成各种操作。 * 支持连接池。 * 支持在主从部署和 cluster 部署模式下的'''读写分离'''。 ** 在此基础上,'''支持读操作负载均衡'''。 * 第三方框架整合: ** Redisson 提供了和 Spring 框架的各项特性类似的,以Spring XML的命名空间的方式配置RedissonClient实例和它所支持的所有对象和服务; ** Redisson 完整的实现了 Spring 框架里的缓存机制; ** Redisson 在 Redis 的基础上实现了 Java 缓存标准规范; ** Redisson 为 Apache Tomcat 集群提供了基于 Redis 的非黏性会话管理功能。该功能支持 Apache Tomcat 的6、7和8版。 ** Redisson 还提供了 Spring Session 会话管理器的实现。 demo: : <syntaxhighlight lang="java" highlight=""> //创建配置 Config config = new Config(); //指定编码,默认编码为org.redisson.codec.JsonJacksonCodec config.setCodec(new org.redisson.client.codec.StringCodec()); //指定使用单节点部署方式 config.useSingleServer().setAddress("redis://127.0.0.1:6379"); config.useSingleServer().setClientName("root"); config.useSingleServer().setPassword("abcabc"); //创建redisson客户端 RedissonClient redisson = Redisson.create(config); RBucket<String> keyObject = redisson.getBucket("key"); keyObject.set("value"); //关闭RedissonClient redisson.shutdown(); </syntaxhighlight> === Lettuce === '''Lettuce''' 是目前 springboot 默认使用的客户端。 特点: * 基于 '''Netty''' 框架的事件驱动的通信层,其方法调用是'''异步'''的。 * Lettuce 的 API 是'''线程安全'''的,所以可以操作单个 Lettuce 连接来完成各种操作。 * 不需要考虑线程池,性能比较高,Spring 生态默认。 * 同样支持连接池。 demo: <syntaxhighlight lang="java" highlight=""> RedisClient client = RedisClient.create("redis://localhost"); StatefulRedisConnection<String, String> connection = client.connect(); RedisStringCommands sync = connection.sync(); String value = sync.get("key"); //////////////////// StatefulRedisConnection<String, String> connection = client.connect(); RedisStringAsyncCommands<String, String> async = connection.async(); RedisFuture<String> set = async.set("key", "value") RedisFuture<String> get = async.get("key") async.awaitAll(set, get) == true set.get() == "OK" get.get() == "value" </syntaxhighlight>
返回至“
Jedis、Redisson与lettuce
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
笔记
服务器
数据库
后端
前端
工具
《To do list》
日常
阅读
电影
摄影
其他
Software
Windows
WIKIOE
所有分类
所有页面
侧边栏
站点日志
工具
链入页面
相关更改
特殊页面
页面信息