/*
* Copyright © 2018 www.noark.xyz All Rights Reserved.
*
* 感谢您选择Noark框架,希望我们的努力能为您提供一个简单、易用、稳定的服务器端框架 !
* 除非符合Noark许可协议,否则不得使用该文件,您可以下载许可协议文件:
*
* http://www.noark.xyz/LICENSE
*
* 1.未经许可,任何公司及个人不得以任何方式或理由对本框架进行修改、使用和传播;
* 2.禁止在本项目或任何子项目的基础上发展任何派生版本、修改版本或第三方版本;
* 3.无论你对源代码做出任何修改和改进,版权都归Noark研发团队所有,我们保留所有权利;
* 4.凡侵犯Noark版权等知识产权的,必依法追究其法律责任,特此郑重法律声明!
*/
package xyz.noark.redis;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisPubSub;
import redis.clients.jedis.params.SetParams;
import redis.clients.jedis.resps.Tuple;
import xyz.noark.core.exception.ServerBootstrapException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import static xyz.noark.log.LogHelper.logger;
/**
* Redis操作类.
*
* @author 小流氓[176543888@qq.com]
* @since 3.0
*/
public class Redis implements ValueOperations {
/**
* 默认超时(毫秒)
*/
private static final int DEFAULT_TIMEOUT = 3000;
/**
* 默认DB
*/
private static final int DEFAULT_INDEX = 0;
/**
* Ping-Pong 响应值
*/
private static final String PONG = "PONG";
/**
* REDIS链接池
*/
private final JedisPool pool;
public Redis(String host, int port) {
this(host, port, DEFAULT_INDEX);
}
public Redis(String host, int port, int database) {
this(host, port, null, database);
}
public Redis(String host, int port, String password) {
this(host, port, password, DEFAULT_INDEX);
}
public Redis(String host, int port, String password, int index) {
this.pool = new JedisPool(new JedisPoolConfig(), host, port, DEFAULT_TIMEOUT, password, index);
logger.info("redis info. host={},port={},database={}", host, port, index);
}
public Redis(JedisPool pool) {
this.pool = pool;
}
public Redis ping() {
try (Jedis j = pool.getResource()) {
if (PONG.equals(j.ping())) {
logger.info("Redis链接正常.");
} else {
logger.warn("Redis链接异常.");
}
} catch (Exception e) {
throw new ServerBootstrapException("Redis ping exception.", e);
}
return this;
}
// ------------------------------Key相关命令------------------------------
/**
* 删除给定的一个或多个key.
* <p>
* 可用版本: >= 1.0.0<br>
* 时间复杂度: O(N), N 为被删除的 key 的数量。<br>
* 删除单个字符串类型的 key ,时间复杂度为O(1)。<br>
* 删除单个列表、集合、有序集合或哈希表类型的 key ,时间复杂度为O(M), M 为以上数据结构内的元素数量。
* <p>
* 不存在的 key 会被忽略。
*
* @param keys 一个或多个key
* @return 被删除 key 的数量
*/
public long del(String... keys) {
try (Jedis jedis = pool.getResource()) {
return jedis.del(keys);
}
}
/**
* 序列化指定的键key,并返回被序列化的值,使用{@link #restore(String, long, byte[])}命令可以将这个值反序列化为Redis键.
* <p>
* 序列化生成的值有以下几个特点:
* <p>
* 它带有 64 位的校验和,用于检测错误, RESTORE 在进行反序列化之前会先检查校验和。<br>
* 值的编码格式和 RDB 文件保持一致。<br>
* RDB版本会被编码在序列化值当中,如果因为Redis的版本不同造成RDB格式不兼容,那么Redis会拒绝对这个值进行反序列化操作。<br>
* 序列化的值不包括任何生存时间信息。
* <p>
* 可用版本: >= 2.6.0<br>
* 时间复杂度:<br>
* 查找给定键的复杂度为O(1),对键进行序列化的复杂度为
* O(N*M),其中N是构成key的Redis对象的数量,而M则是这些对象的平均大小。<br>
* 如果序列化的对象是比较小的字符串,那么复杂度为 O(1) 。<br>
*
* @param key 指定的键
* @return 如果key不存在,那么返回null,否则,返回序列化之后的值。
*/
public byte[] dump(String key) {
try (Jedis jedis = pool.getResource()) {
return jedis.dump(key);
}
}
/**
* 反序列化给定的序列化值,并将它和给定的key关联。
* <p>
* RESTORE在执行反序列化之前会先对序列化值的RDB版本和数据校验和进行检查,如果RDB版本不相同或者数据不完整的话,那么
* RESTORE会拒绝进行反序列化,并返回一个错误。
* <p>
* 更多信息可以参考{@link #dump(String)}命令。
* <p>
* 可用版本: >= 2.6.0<br>
* 时间复杂度:<br>
* 查找给定键的复杂度为 O(1),对键进行反序列化的复杂度为
* O(N*M),其中N是构成key的Redis对象的数量,而M则是这些对象的平均大小。<br>
* 有序集合(sorted set)的反序列化复杂度为 O(N*M*log(N)) ,因为有序集合每次插入的复杂度为 O(log(N)) 。<br>
* 如果反序列化的对象是比较小的字符串,那么复杂度为 O(1) 。<br>
*
* @param key 指定的键
* @param ttl 以毫秒为单位为key设置生存时间;如果ttl为 0 ,那么不设置生存时间。
* @param serializedValue 要反序列化的字节数组
* @return 如果反序列化成功那么返回OK,否则返回一个错误。
*/
public String restore(final String key, final long ttl, final byte[] serializedValue) {
try (Jedis jedis = pool.getResource()) {
return jedis.restore(key, ttl, serializedValue);
}
}
/**
* 判定指定的键是否存在。
* <p>
* 可用版本: >= 1.0.0<br>
* 时间复杂度: O(1)
*
* @param key 指定的键
* @return 存在返回true, 否则返回false.
*/
public boolean exists(final String key) {
try (Jedis jedis = pool.getResource()) {
return jedis.exists(key);
}
}
/**
* 给指定键Key设置生存时间,当key过期时(生存时间为 0),它会被自动删除。
* <p>
* 更新生存时间<br>
* 可以对一个已经带有生存时间的 key 执行 EXPIRE 命令,新指定的生存时间会取代旧的生存时间。
* <p>
* 可用版本: >= 1.0.0<br>
* 时间复杂度: O(1)
*
* @param key 指定键
* @param seconds 秒
* @return 设置成功返回 1 。 当key不存在或者不能为 key设置生存时间时,返回 0 。
*/
public long expire(final String key, long seconds) {
try (Jedis jedis = pool.getResource()) {
return jedis.expire(key, seconds);
}
}
/**
* EXPIREAT 的作用和 {@link Redis#expire(String, long)} 类似,都用于为key设置生存时间。<br>
* 不同在于EXPIREAT命令接受的时间参数是UNIX时间戳(unix timestamp)。
* <p>
* 可用版本: >= 1.2.0<br>
* 时间复杂度: O(1)
*
* @param key 指定键
* @param unixTime UNIX时间戳
* @return 如果生存时间设置成功,返回 1 。 当key不存在或没办法设置生存时间,返回 0 。
*/
public long expireAt(final String key, long unixTime) {
try (Jedis jedis = pool.getResource()) {
没有合适的资源?快使用搜索试试~ 我知道了~
一个由Java实现的游戏服务器端框架,可快速开发出易维护、高性能、高扩展能力的游戏服务器
共878个文件
java:833个
xml:11个
gradle:10个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 157 浏览量
2024-03-08
11:15:49
上传
评论 1
收藏 1.24MB ZIP 举报
温馨提示
一个由Java实现的游戏服务器端框架,可快速开发出易维护、高性能、高扩展能力的游戏服务器
资源推荐
资源详情
资源评论
收起资源包目录
一个由Java实现的游戏服务器端框架,可快速开发出易维护、高性能、高扩展能力的游戏服务器 (878个子文件)
noark.banner 441B
gradlew.bat 3KB
.gitignore 353B
.gitignore 31B
build.gradle 3KB
build.gradle 393B
build.gradle 337B
build.gradle 332B
build.gradle 239B
settings.gradle 218B
build.gradle 214B
build.gradle 188B
build.gradle 145B
build.gradle 110B
gradlew 8KB
gradle-wrapper.jar 62KB
agent.jar 775B
Redis.java 40KB
StringUtils.java 22KB
DateUtils.java 20KB
AbstractSqlDataAccessor.java 18KB
DispatcherServlet.java 16KB
ThreadDispatcher.java 16KB
MysqlSqlExpert.java 15KB
MathUtils.java 15KB
MysqlDataAccessor.java 13KB
DoubleArrayList.java 12KB
HttpUtils.java 12KB
CronExpression.java 12KB
FieldUtils.java 12KB
FloatArrayList.java 12KB
MapUtils.java 11KB
AsyncWriteContainer.java 11KB
RandomUtils.java 11KB
FileUtils.java 11KB
NoarkLauncher.java 10KB
RedisDistributedEventManager.java 10KB
NoarkPropertiesLoader.java 9KB
DefaultBeanDefinition.java 9KB
Csv.java 9KB
AbstractServerBootstrap.java 9KB
MultiDataCacheImpl.java 9KB
LongArrayList.java 9KB
IntArrayList.java 9KB
NoarkHttpServletRequest.java 9KB
AbstractDfaScanner.java 9KB
DateUtilsTest.java 8KB
ArrayUtils.java 8KB
AnnotationEntityMaker.java 8KB
IocLoader.java 8KB
AbstractServerHandler.java 8KB
CollectionUtils.java 8KB
NacosConfigManager.java 8KB
ResourceScanning.java 8KB
HttpsUtils.java 8KB
NettyServer.java 8KB
DefaultEventManager.java 7KB
EntityMapping.java 7KB
HttpServer.java 7KB
AbstractMapConverter.java 7KB
UniqueDataCacheImpl.java 7KB
AbstractAsyncWriteService.java 7KB
ControllerBeanDefinition.java 7KB
SessionManager.java 7KB
EmojiManager.java 6KB
PacketMethodManager.java 6KB
LocalTimeArray.java 6KB
LogConfigurator.java 6KB
FieldMapping.java 6KB
IpAllowListConfig.java 6KB
LocalPacketMethodWrapper.java 6KB
HtmlUtils.java 6KB
IpUtils.java 6KB
PreparedStatementProxy.java 6KB
NetworkConstant.java 6KB
StopWatch.java 6KB
CsvReader.java 6KB
Crc32Utils.java 6KB
SkillTemplate.java 5KB
NetworkLoggingHandler.java 5KB
MapUtilsTest.java 5KB
RpcConnector.java 5KB
ConvertManager.java 5KB
NoarkIoc.java 5KB
SocketSession.java 5KB
AbstractListConverter.java 5KB
DfaResembleManager.java 5KB
PatternParser.java 5KB
DefaultFieldDefinition.java 5KB
RandomUtilsTest.java 5KB
LocalTimeArrayTest.java 5KB
RobotManager.java 5KB
RsaUtils.java 5KB
BaseServerBootstrap.java 5KB
EventMethodManager.java 5KB
MysqlKeyword.java 5KB
MultiCacheRepository.java 4KB
EventMethodWrapper.java 4KB
MessageHelperTest.java 4KB
OrmRepository.java 4KB
共 878 条
- 1
- 2
- 3
- 4
- 5
- 6
- 9
资源评论
Java程序员-张凯
- 粉丝: 1w+
- 资源: 6705
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于Javascript和Python的微商城项目设计源码 - MicroMall
- 基于Java的网上订餐系统设计源码 - online ordering system
- 基于Javascript的超级美眉网络资源管理应用模块设计源码
- 基于Typescript和PHP的编程知识储备库设计源码 - study-php
- Screenshot_2024-05-28-11-40-58-177_com.tencent.mm.jpg
- 基于Dart的Flutter小提琴调音器APP设计源码 - violinhelper
- 基于JavaScript和CSS的随寻订购网页设计源码 - web-order
- 基于MATLAB的声纹识别系统设计源码 - VoiceprintRecognition
- 基于Java的微服务插件集合设计源码 - wsy-plugins
- 基于Vue和微信小程序的监理日志系统设计源码 - supervisionLog
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功