您的位置:

Redis工具类封装

Redis是一种非关系型的内存数据库。由于其高效、高可用性、高扩展性等优点,现已成为众多企业中的首选方案。在使用Redis的过程中,我们经常需要开发Redis工具类进行数据的增删改查等操作。在本文中,我们将从多个方面对Redis工具类封装进行详细阐述。

一、flushdb

在Redis中,我们需要经常清空Redis缓存。一种常用的方法是通过flushall命令清空所有的数据库。然而,这种方式非常不安全,因为它会一次性清空所有缓存中的数据。如果某个Redis实例中缓存数据非常关键,这种方式会影响服务的正常运行。为此,在封装Redis工具类时,我们应当将flushdb命令进行封装,以保障缓存数据的安全。

下面是一个RedisUtil工具类,其中包含了flushdb命令的封装:

public class RedisUtil {
    private static JedisPool jedisPool;

    /**
     * 静态代码块,初始化jedisPool
     */
    static {
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxTotal(100);
        jedisPoolConfig.setMaxIdle(50);
        jedisPool = new JedisPool(jedisPoolConfig, "localhost");
    }

    /**
     * 清空当前数据库
     */
    public static void flushDb() {
        Jedis jedis = jedisPool.getResource();
        try {
            jedis.flushDB();
        } finally {
            jedis.close();
        }
    }
}

在该工具类中,我们通过静态代码块初始化了一个jedisPool连接池。该连接池在不断地拿取和释放Redis连接,以保障Redis连接的高效利用。同时,该工具类中还封装了flushDB方法,用于清空当前数据库中的数据。

二、Redis工具类

Redis是一种非常灵活的数据库方案。由于其非关系型的特点,Redis的数据类型种类非常丰富。在开发Redis工具类时,我们需要针对不同的数据类型进行封装。

下面是一个基于Jedis实现的RedisUtil工具类。该工具类中,我们针对Redis的五种数据类型(Array、String、Hash、List、Set)进行了封装。

public class RedisUtil {

    private static final String CHARSET_UTF_8 = "UTF-8";
    private static JedisPool jedisPool;

    static {
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxTotal(100);
        jedisPoolConfig.setMaxIdle(50);
        jedisPool = new JedisPool(jedisPoolConfig, "localhost");
    }

    /**
     * 通过key获取值
     *
     * @param key key
     */
    public static String get(String key) {
        try (Jedis jedis = jedisPool.getResource()) {
            return jedis.get(key);
        }
    }

    /**
     * 设置String类型的值
     *
     * @param key     key
     * @param value   value
     * @param seconds 过期时间,单位为秒
     */
    public static void setex(String key, String value, int seconds) {
        try (Jedis jedis = jedisPool.getResource()) {
            jedis.setex(key, seconds, value);
        }
    }

    /**
     * 列表尾部添加元素
     *
     * @param key   key
     * @param value value
     */
    public static void rpush(String key, String value) {
        try (Jedis jedis = jedisPool.getResource()) {
            jedis.rpush(key, value);
        }
    }

    /**
     * 列表头部添加元素
     *
     * @param key   key
     * @param value value
     */
    public static void lpush(String key, String value) {
        try (Jedis jedis = jedisPool.getResource()) {
            jedis.lpush(key, value);
        }
    }

    /**
     * 获取列表指定范围内的元素
     *
     * @param key   key
     * @param start 起始下标,从0开始
     * @param end   结束下标,-1表示结束
     */
    public static List lrange(String key, long start, long end) {
        try (Jedis jedis = jedisPool.getResource()) {
            return jedis.lrange(key, start, end);
        }
    }

    /**
     * Set集合添加元素
     *
     * @param key    key
     * @param member member
     */
    public static void sadd(String key, String... member) {
        try (Jedis jedis = jedisPool.getResource()) {
            jedis.sadd(key, member);
        }
    }

    /**
     * 获取Set集合中的所有成员
     *
     * @param key key
     */
    public static Set
    smembers(String key) {
        try (Jedis jedis = jedisPool.getResource()) {
            return jedis.smembers(key);
        }
    }

    /**
     * Hash类型数据存储
     *
     * @param key   key
     * @param field field
     * @param value value
     */
    public static void hSet(String key, String field, String value) {
        try (Jedis jedis = jedisPool.getResource()) {
            jedis.hset(key, field, value);
        }
    }

    /**
     * 获取Hash类型数据中指定的value
     *
     * @param key   key
     * @param field field
     */
    public static String hGet(String key, String field) {
        try (Jedis jedis = jedisPool.getResource()) {
            return jedis.hget(key, field);
        }
    }

    /**
     * Array类型数据存储
     *
     * @param key    key
     * @param offset 数组下标
     * @param value  value
     */
    public static void lset(String key, long offset, String value) {
        try (Jedis jedis = jedisPool.getResource()) {
            jedis.lset(key.getBytes(CHARSET_UTF_8), offset, value.getBytes(CHARSET_UTF_8));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    }

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

   
  

三、Redis的五种数据类型

在Redis中,有五种基本的数据类型:string、hash、list、set和zset。在实际应用中,我们需要根据不同的场景,在这些数据类型中选择合适的数据类型。

四、SpringBoot Redis工具类

SpringBoot是spring官方推出的一种快速开发框架。在该框架中,我们可以通过注解的方式方便地集成Redis。下面是一个SpringBoot RedisUtil的示例:

@Component
public class RedisUtil {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    /**
     * 通过key获取值
     *
     * @param key key
     */
    public String get(final String key) {
        return stringRedisTemplate.opsForValue().get(key);
    }

    /**
     * 设置String类型的值
     *
     * @param key     key
     * @param value   value
     * @param seconds 过期时间,单位为秒
     */
    public void setex(final String key, final String value, long seconds) {
        stringRedisTemplate.opsForValue().set(key, value, seconds, TimeUnit.SECONDS);
    }

    /**
     * 删除key
     *
     * @param key key
     */
    public Long del(final String key) {
        return stringRedisTemplate.delete(key);
    }

    /**
     * 判断key是否存在
     *
     * @param key key
     * @return true存在,false不存在
     */
    public Boolean exists(final String key) {
        return stringRedisTemplate.hasKey(key);
    }
}

该工具类采用了SpringBoot自带的StringRedisTemplate进行Redis的封装。在该工具类中,我们通过注解的方式自动注入StringRedisTemplate。然后,我们就可以像使用原生的Redis一样,调用StringRedisTemplate中的opsForValue等方法进行Redis操作。

五、总结

本文从五个方面对Redis工具类封装进行了详细的阐述。在实际应用中,我们应当根据具体的场景选择合适的封装方式,以保证Redis的高效使用。

Redis工具类封装

2023-05-19
js常用代码工具封装类整理,java常用工具类封装

本文目录一览: 1、前端基本功:JS(十一)动画封装(CSS样式获取、JSON遍历) 2、.JS有哪些框架 3、如何实现JS的封装和JS封装的好处 4、js代码如何封装 5、新手请教,如何将一段JS代

2023-12-08
重学java笔记,java笔记总结

2022-11-23
java笔记,大学java笔记

2022-11-28
java学习笔记(java初学笔记)

2022-11-14
java方法整理笔记(java总结)

2022-11-08
印象笔记记录java学习(Java成长笔记)

2022-11-12
java学习的一些基础笔记(java初学笔记)

2022-11-14
java笔记,尚硅谷java笔记

2022-12-01
Mac笔记:在日常生活中高效实用的笔记工具

2023-05-18
每日java学习笔记(java高手笔记)

2022-11-15
RedisResp:一种高性能的Redis协议封装

2023-05-20
python基础学习整理笔记,Python课堂笔记

2022-11-21
python课堂整理32(python笔记全)

2022-11-12
javascript如何封装自己的js插件(js 工具类封装

本文目录一览: 1、如何用javascript写个插件 2、怎样用原生JS封装自己需要的插件 3、封装一个自己的js库 4、JS方法写好了 用JS写的脚本 然后我想封装JS如何封装? 如何用javas

2023-12-08
java封装类,java封装类的过程

2023-01-03
java基础知识学习笔记一,Java基础笔记

2022-11-21
java封装类,java封装类有哪些

2022-12-01
JDBC工具类的封装与使用

2023-05-17
java的封装,java的封装类有哪些

2022-11-28