基于IDEA的Jedis的使用之JedisPool(史上最最最最最最全l!!!)

[使用IDEA创建一个SpringBoot工程路径:]https://blog.csdn.net/weixin_45423451/article/details/103137733
[基于JAVA的redis使用(Jedis-API):]https://blog.csdn.net/weixin_45423451/article/details/103138699
下来我们就用idea的操作redis:
1.在pom.xml中配置依赖:

  <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.3</version>
 </dependency>

2.在SpringBoot的application.properties配置文件中配置redis:

## REDIS (RedisProperties)
# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=127.0.0.1
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=200
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
# 连接池中的最大空闲连接
spring.redis.pool.max-idle=8
# 连接池中的最小空闲连接
spring.redis.pool.min-idle=0
# 连接超时时间(毫秒)
spring.redis.timeout=6000

3.配置JedisPool的配置类:

@Configuration
@EnableAutoConfiguration
@ConfigurationProperties
public class JedisConfig {
    @Value("${spring.redis.database}")
    private int database;
    @Value("${spring.redis.host}")
    private String host;
    @Value("${spring.redis.port}")
    private int port;
    @Value("${spring.redis.password}")
    private String password;
    @Value("${spring.redis.timeout}")
    private int timeout;
    @Value("${spring.redis.pool.max-active}")
    private int maxActive;
    @Value("${spring.redis.pool.max-wait}")
    private int maxWait;
    @Value("${spring.redis.pool.max-idle}")
    private int maxIdle;
    @Value("${spring.redis.pool.min-idle}")
    private int minIdle;

    @Bean
    public JedisPool redisPoolFactory() {
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxIdle(maxIdle);
        jedisPoolConfig.setMaxWaitMillis(maxWait);
        jedisPoolConfig.setMaxTotal(maxActive);
        jedisPoolConfig.setMinIdle(minIdle);
        jedisPoolConfig.setTestOnBorrow(false);//jedis 第一次启动时,会报错
        jedisPoolConfig.setTestOnReturn(true);

        return new JedisPool(jedisPoolConfig, host, port, timeout, null, database);
    }
}

4.JedisPool的使用(String类型):

@Component
public class JedisUtil {

    private static JedisPool jedisPool;

    @Autowired
    public void setJedisPool(JedisPool jedisPool) {
        JedisUtil.jedisPool = jedisPool;
    }

    /**
     * 获取Jedis实例
     */
    public static Jedis getJedis() {
        if (jedisPool != null) {
            return jedisPool.getResource();
        } else {
            return null;
        }
    }

    /**
     * 按key获取value
     */
    public static Object getValue(String key) {
        try (Jedis jedis = jedisPool.getResource()) {
            return SerializationUtils.deserialize(jedis.get(key.getBytes()));
        }
    }

    /**
     * 按key设置value
     */
    public static String setValue(String key, Object value) {
        try (Jedis jedis = jedisPool.getResource()) {
            return jedis.set(key.getBytes(), SerializationUtils.serialize(value));
        }
    }

    /**
     * 按key设置value,expiretime(秒)
     */
    public static String setValue(String key, Object value, int expiretime) {
        try (Jedis jedis = jedisPool.getResource()) {
            String result = jedis.set(key.getBytes(), SerializationUtils.serialize(value));
            if (Constant.OK.equals(result)) {
                jedis.expire(key.getBytes(), expiretime);
            }
            return result;
        }
    }

    /**
     * 按key刪除
     */
    public static Long del(String... key) {
        try (Jedis jedis = jedisPool.getResource()) {
            return jedis.del(key);
        }
    }

    /**
     * 检查key是否存在
     */
    public static Boolean exists(String key) {
        try (Jedis jedis = jedisPool.getResource()) {
            return jedis.exists(key.getBytes());
        }
    }

    /**
     * 按key重新过期时间
     */
    public static Long expire(String key, int seconds) {
        try (Jedis jedis = jedisPool.getResource()) {
            return jedis.expire(key.getBytes(), seconds);
        }
    }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RedisTemplate是Spring Data Redis提供的一个用于操作Redis的模板类,它封装了Redis的连接、数据序列化、异常处理等操作,使得我们可以更加方便地使用Redis。下面是RedisTemplate的使用详解: 1. 配置RedisTemplate 在Spring Boot中,我们可以通过配置文件来配置RedisTemplate,如下所示: ``` spring.redis.host=127.0.0.1 spring.redis.port=6379 spring.redis.password= spring.redis.database=0 ``` 2. 注入RedisTemplate 在需要使用Redis的地方,我们可以通过注入RedisTemplate来获取Redis连接,如下所示: ``` @Autowired private RedisTemplate<String, Object> redisTemplate; ``` 3. RedisTemplate常用操作 RedisTemplate提供了多种操作Redis的方法,下面是一些常用的操作: - 字符串操作 ``` redisTemplate.opsForValue().set("key", "value"); redisTemplate.opsForValue().get("key"); ``` - 列表操作 ``` redisTemplate.opsForList().leftPush("list", "value"); redisTemplate.opsForList().rightPop("list"); ``` - 集合操作 ``` redisTemplate.opsForSet().add("set", "value"); redisTemplate.opsForSet().members("set"); ``` - 哈希操作 ``` redisTemplate.opsForHash().put("hash", "key", "value"); redisTemplate.opsForHash().get("hash", "key"); ``` - 事务操作 ``` redisTemplate.execute(new SessionCallback<Object>() { @Override public Object execute(RedisOperations operations) throws DataAccessException { operations.multi(); operations.opsForValue().set("key1", "value1"); operations.opsForValue().set("key2", "value2"); operations.exec(); return null; } }); ``` 4. Lua脚本操作 Redis支持使用Lua脚本进行操作,可以提高Redis的性能和安性。下面是一个使用Lua脚本进行加锁的例子: ``` String lockKey = "lock"; String requestId = UUID.randomUUID().toString(); String script = "if redis.call('setnx', KEYS[1], ARGV[1]) == 1 then return redis.call('expire', KEYS[1], ARGV[2]) else return 0 end"; Boolean result = redisTemplate.execute(new RedisCallback<Boolean>() { @Override public Boolean doInRedis(RedisConnection connection) throws DataAccessException { Object nativeConnection = connection.getNativeConnection(); if (nativeConnection instanceof Jedis) { return (Boolean) ((Jedis) nativeConnection).eval(script, Collections.singletonList(lockKey), Arrays.asList(requestId, "60")); } return false; } }); ``` 这个例子中,我们使用Lua脚本实现了一个分布式锁,可以避免多个线程同时访问同一个资源的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值