引入依赖
pom.xml:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.1</version>
<scope>test</scope>
</dependency>
测试
Jedis 对象的构造方法:
Jedis(String host,int port);
Jedis(String host,int port,int connectionTimeout,int soTimeout);
- host:Redis 节点所在机器的 IP
- port:Redis 节点的端口
- connectionTimeout:客户端连接超时
- soTimeout:客户端读写超时
Jedis 使用(直连方式):
- 创建 Jedis 对象
- 选择要操作的数据库
- 执行相关操作
- 返回执行结果
关闭 Jedis 连接
public class JedisTest {
private Jedis jedis;
@Before
public void before(){
// 1.创建jedis对象
// 前提:redis服务开启远程连接
jedis = new Jedis("47.113.89.216",6379);
// 2.选择操作的数据库
jedis.select(0);
}
@After
public void after() {
// 4.释放资源
jedis.close();
}
@Test
public void testKey() {
// 查询所有符合规则的key
Set<String> keys = jedis.keys("*");
keys.forEach(System.out::println);
// exists key1,[key2,...]:返回存在的key数
Long exists = jedis.exists("name", "age");
// del keys:删除key,返回删除的key数
Long del = jedis.del("name", "age");
// expire:设置key的超时时间
Long sex = jedis.expire("sex", 10);
// ttl:查看key的超时时间
Long sex1 = jedis.ttl("sex");
// randomKey:随机获取一个key
String s = jedis.randomKey();
// rename:修改key名称
String rename = jedis.rename("sex", "isMan");
// type:查看对应key的值的类型
String sex2 = jedis.type("sex");
}
@Test
public void testString() {
// 1. set key value:赋值
final String time = jedis.set("time", LocalDateTime.now().toString());
// 2. get key:取值,键不存在返回 nil
final String time1 = jedis.get("time");
// 3. mset key1 value1 [key2 value2...]:一次设置多个key value
String[] strings =new String[]{
"key1","v1",
"key2","v2",
"key3","v3"
};
final String mset = jedis.mset(strings);
// 4. mget key1 [key2 ...]:一次获取多个 key
String[] strings1 = new String[]{
"key1","key2","key3","key4"
};
final List<String> mget = jedis.mget(strings1);
// 5. getset key value:获取原始key的value值,同时设置新值
final String set = jedis.getSet("key1", "new value1");
// 6. strlen key:返回key存储的value的长度(**为字节数,注意不是字符数**)
final Long key1 = jedis.strlen("key1");
// 7. append key value:为对应 key 的value追加内容
// 8. getrange 索引0开始:截取value的内容,开始 0,结尾 -1
// 9. setex key seconds value:设置一个key存活的有效期(秒)
// 10. psetex key milliseconds value:设置一个key存活的有效期(毫秒)
// 11. setnx key value:key存在不做任何操作,不存在则添加
// 12. msetnx key1 value1 [key2 value2...]:一次设置多个key value,只要有一个存在则不做添加,**原子操作**
// 13. decr key:进行数据的 -1 操作
// 14. decrby key decrement:根据指定的decrement进行减法操作
// 15. incr key:进行数据的 +1 操作
// 16. incrby key increment:根据指定的increment进行加法操作
// 17. incrbyfloat key float:根据提供的数据加入浮点数
}
}
Jedis 连接池:
// 1.初始化连接池
GenericObjectPoolConfig<Object> poolConfig = new GenericObjectPoolConfig<>();
// 或者使用JedisPoolConfig,其继承了GenericObjectPoolConfig
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxTotal(10);
jedisPoolConfig.setMaxIdle(10);
JedisPool jedisPool = new JedisPool(poolConfig, "localhost", 6379);
// 2.简单使用
Jedis jedis = null;
try {
// 从连接池中获取对象
jedis = jedisPool.getResource();
// 执行操作
jedis.set("user:1", "Bob");
} catch (Exception e) {
logger.error(e.getMessage(),e);
} finally {
if (jedis != null) {
// 使用JedisPool,close操作不是关闭连接,而是归还连接池
jedis.close();
}
}
commons-pool 配置:
参数名 | 含义 | 默认值 | 使用建议 |
---|---|---|---|
maxTotal | 资源池最大连接数 | 8 | |
maxIdle | 资源池允许的最大空闲数 | 8 | 建议maxIdle=maxTotal |
minIdle | 资源池确保最少空闲连接数 | 0 | |
jmxEnabled | 是否开启jmx监控 | true | 建议开启 |
blockWhenExhausted | 当资源池用尽后,调用者是否要等待,只有此属性设置为 true,下面的maxWaitMillis属性才能生效 | true | 建议使用默认值 |
maxWaitMillis | 当资源池连接用尽后,调用者的最大等待时间(单位为 ms) | -1:表示永不超时 | 不建议使用默认值 |
testOnBorrow | 向资源池借用连接时是否做连接有效性检测(ping),无效连接会被移除 | false | 建议false |
testOnReturn | 向资源池归还连接时是否做连接有效性检测(ping),无效连接会被移除 | false | 建议false |