引入依赖

pom.xml:

  1. <dependency>
  2. <groupId>redis.clients</groupId>
  3. <artifactId>jedis</artifactId>
  4. <version>3.3.0</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>junit</groupId>
  8. <artifactId>junit</artifactId>
  9. <version>4.13.1</version>
  10. <scope>test</scope>
  11. </dependency>

测试

Jedis 对象的构造方法:

  1. Jedis(String host,int port);
  2. Jedis(String host,int port,int connectionTimeout,int soTimeout);
  • host:Redis 节点所在机器的 IP
  • port:Redis 节点的端口
  • connectionTimeout:客户端连接超时
  • soTimeout:客户端读写超时

Jedis 使用(直连方式):

  1. 创建 Jedis 对象
  2. 选择要操作的数据库
  3. 执行相关操作
  4. 返回执行结果
  5. 关闭 Jedis 连接

    1. public class JedisTest {
    2. private Jedis jedis;
    3. @Before
    4. public void before(){
    5. // 1.创建jedis对象
    6. // 前提:redis服务开启远程连接
    7. jedis = new Jedis("47.113.89.216",6379);
    8. // 2.选择操作的数据库
    9. jedis.select(0);
    10. }
    11. @After
    12. public void after() {
    13. // 4.释放资源
    14. jedis.close();
    15. }
    16. @Test
    17. public void testKey() {
    18. // 查询所有符合规则的key
    19. Set<String> keys = jedis.keys("*");
    20. keys.forEach(System.out::println);
    21. // exists key1,[key2,...]:返回存在的key数
    22. Long exists = jedis.exists("name", "age");
    23. // del keys:删除key,返回删除的key数
    24. Long del = jedis.del("name", "age");
    25. // expire:设置key的超时时间
    26. Long sex = jedis.expire("sex", 10);
    27. // ttl:查看key的超时时间
    28. Long sex1 = jedis.ttl("sex");
    29. // randomKey:随机获取一个key
    30. String s = jedis.randomKey();
    31. // rename:修改key名称
    32. String rename = jedis.rename("sex", "isMan");
    33. // type:查看对应key的值的类型
    34. String sex2 = jedis.type("sex");
    35. }
    36. @Test
    37. public void testString() {
    38. // 1. set key value:赋值
    39. final String time = jedis.set("time", LocalDateTime.now().toString());
    40. // 2. get key:取值,键不存在返回 nil
    41. final String time1 = jedis.get("time");
    42. // 3. mset key1 value1 [key2 value2...]:一次设置多个key value
    43. String[] strings =new String[]{
    44. "key1","v1",
    45. "key2","v2",
    46. "key3","v3"
    47. };
    48. final String mset = jedis.mset(strings);
    49. // 4. mget key1 [key2 ...]:一次获取多个 key
    50. String[] strings1 = new String[]{
    51. "key1","key2","key3","key4"
    52. };
    53. final List<String> mget = jedis.mget(strings1);
    54. // 5. getset key value:获取原始key的value值,同时设置新值
    55. final String set = jedis.getSet("key1", "new value1");
    56. // 6. strlen key:返回key存储的value的长度(**为字节数,注意不是字符数**)
    57. final Long key1 = jedis.strlen("key1");
    58. // 7. append key value:为对应 key 的value追加内容
    59. // 8. getrange 索引0开始:截取value的内容,开始 0,结尾 -1
    60. // 9. setex key seconds value:设置一个key存活的有效期(秒)
    61. // 10. psetex key milliseconds value:设置一个key存活的有效期(毫秒)
    62. // 11. setnx key value:key存在不做任何操作,不存在则添加
    63. // 12. msetnx key1 value1 [key2 value2...]:一次设置多个key value,只要有一个存在则不做添加,**原子操作**
    64. // 13. decr key:进行数据的 -1 操作
    65. // 14. decrby key decrement:根据指定的decrement进行减法操作
    66. // 15. incr key:进行数据的 +1 操作
    67. // 16. incrby key increment:根据指定的increment进行加法操作
    68. // 17. incrbyfloat key float:根据提供的数据加入浮点数
    69. }
    70. }

Jedis 连接池:
image.png

  1. // 1.初始化连接池
  2. GenericObjectPoolConfig<Object> poolConfig = new GenericObjectPoolConfig<>();
  3. // 或者使用JedisPoolConfig,其继承了GenericObjectPoolConfig
  4. JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
  5. jedisPoolConfig.setMaxTotal(10);
  6. jedisPoolConfig.setMaxIdle(10);
  7. JedisPool jedisPool = new JedisPool(poolConfig, "localhost", 6379);
  8. // 2.简单使用
  9. Jedis jedis = null;
  10. try {
  11. // 从连接池中获取对象
  12. jedis = jedisPool.getResource();
  13. // 执行操作
  14. jedis.set("user:1", "Bob");
  15. } catch (Exception e) {
  16. logger.error(e.getMessage(),e);
  17. } finally {
  18. if (jedis != null) {
  19. // 使用JedisPool,close操作不是关闭连接,而是归还连接池
  20. jedis.close();
  21. }
  22. }

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