广告
返回顶部
首页 > 资讯 > 数据库 >RedisTemplate常用方法封装
  • 367
分享到

RedisTemplate常用方法封装

RedisTemplate常用方法封装 2014-05-04 19:05:35 367人浏览 才女
摘要

RedisTemplate常用方法封装 序列化和配置 package com.gitee.ccsert.mall.common.redis.config; import com.fasterxml.jackson.annotation.

RedisTemplate常用方法封装

RedisTemplate常用方法封装

序列化和配置

package com.gitee.ccsert.mall.common.redis.config;

import com.fasterxml.jackson.annotation.JSONAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
import com.gitee.ccsert.mall.common.redis.RedisService;
import com.gitee.ccsert.mall.common.redis.impl.RedisServiceImpl;
import org.springframework.context.annotation.Bean;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.cache.RedisCacheWriter;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

import java.time.Duration;


@Configuration
public class BaseRedisConfig {
    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisSerializer serializer = redisSerializer();
        RedisTemplate redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        redisTemplate.seTKEySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(serializer);
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashValueSerializer(serializer);
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }

    @Bean
    public RedisSerializer redisSerializer() {

        //创建JSON序列化器
        Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer<>(Object.class);
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        //必须设置,否则无法将JSON转化为对象,会转化成Map类型
        objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance,ObjectMapper.DefaultTyping.NON_FINAL);
        serializer.setObjectMapper(objectMapper);
        return serializer;
    }
    @Bean
    public RedisCacheManager redisCacheManager(RedisConnectionFactory redisConnectionFactory) {
        RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory);
        //设置Redis缓存有效期为1天
        RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer())).entryTtl(Duration.ofDays(1));
        return new RedisCacheManager(redisCacheWriter, redisCacheConfiguration);
    }
    @Bean
    public RedisService redisService(){
        return new RedisServiceImpl();
    }
}


接口

package com.gitee.ccsert.mall.common.redis;

import org.springframework.data.domain.Sort;
import org.springframework.data.geo.Distance;
import org.springframework.data.geo.GeoResults;
import org.springframework.data.geo.Point;
import org.springframework.data.redis.connection.RedisGeoCommands;

import java.util.List;
import java.util.Map;
import java.util.Set;


public interface RedisService {
    
    void set(String key, Object value, long time);

    
    void set(String key, Object value);

    
    Object get(String key);

    
    Boolean del(String key);

    
    Long del(List keys);

    
    Boolean expire(String key, long time);

    
    Long getExpire(String key);

    
    Boolean hasKey(String key);

    
    Long incr(String key, long delta);

    
    Long decr(String key, long delta);

    
    Object hGet(String key, String hashKey);

    
    Boolean hSet(String key, String hashKey, Object value, long time);

    
    void hSet(String key, String hashKey, Object value);

    
    Map hGetAll(String key);

    
    Boolean hSetAll(String key, Map map, long time);

    
    void hSetAll(String key, Map map);

    
    void hDel(String key, Object... hashKey);

    
    Boolean hHasKey(String key, String hashKey);

    
    Long hIncr(String key, String hashKey, Long delta);

    
    Long hDecr(String key, String hashKey, Long delta);

    
    Set sMembers(String key);

    
    Long sAdd(String key, Object... values);

    
    Long sAdd(String key, long time, Object... values);

    
    Boolean sIsMember(String key, Object value);

    
    Long sSize(String key);

    
    Long sRemove(String key, Object... values);

    
    List lRange(String key, long start, long end);

    
    Long lSize(String key);

    
    Object lIndex(String key, long index);

    
    Long lPush(String key, Object value);

    
    Long lPush(String key, Object value, long time);

    
    Long lPushAll(String key, Object... values);

    
    Long lPushAll(String key, Long time, Object... values);

    
    Long lRemove(String key, long count, Object value);

    
    Boolean bitAdd(String key, int offset, boolean b);

    
    Boolean bitGet(String key, int offset);

    
    Long bitCount(String key);

    
    List bitField(String key, int limit, int offset);

    
    byte[] bitGetAll(String key);

    
    Long geoAdd(String key, Double x, Double y, String name);

    
    List geoGetPointList(String key, Object... place);

    
    Distance geoCalculationDistance(String key, String placeOne, String placeTow);

    
    GeoResults> geoNearByPlace(String key, String place, Distance distance, long limit, Sort.Direction sort);

    
    List geoGetHash(String key, String... place);
}


实现

package com.gitee.ccsert.mall.common.redis.impl;

import com.gitee.ccsert.mall.common.redis.RedisService;
import org.springframework.data.domain.Sort;
import org.springframework.data.geo.Distance;
import org.springframework.data.geo.GeoResults;
import org.springframework.data.geo.Point;
import org.springframework.data.redis.connection.BitFieldSubCommands;
import org.springframework.data.redis.connection.RedisGeoCommands;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;


public class RedisServiceImpl implements RedisService {
    @Resource
    private RedisTemplate redisTemplate;

    @Override
    public void set(String key, Object value, long time) {
        redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
    }

    @Override
    public void set(String key, Object value) {
        redisTemplate.opsForValue().set(key, value);
    }

    @Override
    public Object get(String key) {
        return redisTemplate.opsForValue().get(key);
    }

    @Override
    public Boolean del(String key) {
        return redisTemplate.delete(key);
    }

    @Override
    public Long del(List keys) {
        return redisTemplate.delete(keys);
    }

    @Override
    public Boolean expire(String key, long time) {
        return redisTemplate.expire(key, time, TimeUnit.SECONDS);
    }

    @Override
    public Long getExpire(String key) {
        return redisTemplate.getExpire(key, TimeUnit.SECONDS);
    }

    @Override
    public Boolean hasKey(String key) {
        return redisTemplate.hasKey(key);
    }

    @Override
    public Long incr(String key, long delta) {
        return redisTemplate.opsForValue().increment(key, delta);
    }

    @Override
    public Long decr(String key, long delta) {
        return redisTemplate.opsForValue().increment(key, -delta);
    }

    @Override
    public Object hGet(String key, String hashKey) {
        return redisTemplate.opsForHash().get(key, hashKey);
    }

    @Override
    public Boolean hSet(String key, String hashKey, Object value, long time) {
        redisTemplate.opsForHash().put(key, hashKey, value);
        return expire(key, time);
    }

    @Override
    public void hSet(String key, String hashKey, Object value) {
        redisTemplate.opsForHash().put(key, hashKey, value);
    }

    @Override
    public Map hGetAll(String key) {
        return redisTemplate.opsForHash().entries(key);
    }

    @Override
    public Boolean hSetAll(String key, Map map, long time) {
        redisTemplate.opsForHash().putAll(key, map);
        return expire(key, time);
    }

    @Override
    public void hSetAll(String key, Map map) {
        redisTemplate.opsForHash().putAll(key, map);
    }

    @Override
    public void hDel(String key, Object... hashKey) {
        redisTemplate.opsForHash().delete(key, hashKey);
    }

    @Override
    public Boolean hHasKey(String key, String hashKey) {
        return redisTemplate.opsForHash().hasKey(key, hashKey);
    }

    @Override
    public Long hIncr(String key, String hashKey, Long delta) {
        return redisTemplate.opsForHash().increment(key, hashKey, delta);
    }

    @Override
    public Long hDecr(String key, String hashKey, Long delta) {
        return redisTemplate.opsForHash().increment(key, hashKey, -delta);
    }

    @Override
    public Set sMembers(String key) {
        return redisTemplate.opsForSet().members(key);
    }

    @Override
    public Long sAdd(String key, Object... values) {
        return redisTemplate.opsForSet().add(key, values);
    }

    @Override
    public Long sAdd(String key, long time, Object... values) {
        Long count = redisTemplate.opsForSet().add(key, values);
        expire(key, time);
        return count;
    }

    @Override
    public Boolean sIsMember(String key, Object value) {
        return redisTemplate.opsForSet().isMember(key, value);
    }

    @Override
    public Long sSize(String key) {
        return redisTemplate.opsForSet().size(key);
    }

    @Override
    public Long sRemove(String key, Object... values) {
        return redisTemplate.opsForSet().remove(key, values);
    }

    @Override
    public List lRange(String key, long start, long end) {
        return redisTemplate.opsForList().range(key, start, end);
    }

    @Override
    public Long lSize(String key) {
        return redisTemplate.opsForList().size(key);
    }

    @Override
    public Object lIndex(String key, long index) {
        return redisTemplate.opsForList().index(key, index);
    }

    @Override
    public Long lPush(String key, Object value) {
        return redisTemplate.opsForList().rightPush(key, value);
    }

    @Override
    public Long lPush(String key, Object value, long time) {
        Long index = redisTemplate.opsForList().rightPush(key, value);
        expire(key, time);
        return index;
    }

    @Override
    public Long lPushAll(String key, Object... values) {
        return redisTemplate.opsForList().rightPushAll(key, values);
    }

    @Override
    public Long lPushAll(String key, Long time, Object... values) {
        Long count = redisTemplate.opsForList().rightPushAll(key, values);
        expire(key, time);
        return count;
    }

    @Override
    public Long lRemove(String key, long count, Object value) {
        return redisTemplate.opsForList().remove(key, count, value);
    }

    @Override
    public Boolean bitAdd(String key, int offset, boolean b) {
        return redisTemplate.opsForValue().setBit(key, offset, b);
    }

    @Override
    public Boolean bitGet(String key, int offset) {
        return redisTemplate.opsForValue().getBit(key, offset);
    }

    @Override
    public Long bitCount(String key) {
        return redisTemplate.execute((RedisCallback) con -> con.bitCount(key.getBytes()));
    }

    @Override
    public List bitField(String key, int limit, int offset) {
        return redisTemplate.execute((RedisCallback>) con ->
                con.bitField(key.getBytes(),
                        BitFieldSubCommands.create().get(BitFieldSubCommands.BitFieldType.unsigned(limit)).valueAt(offset)));
    }

    @Override
    public byte[] bitGetAll(String key) {
        return redisTemplate.execute((RedisCallback) con -> con.get(key.getBytes()));
    }

    @Override
    public Long geoAdd(String key, Double x, Double y, String name) {
        return redisTemplate.opsForGeo().add(key, new Point(x, y), name);
    }

    @Override
    public List geoGetPointList(String key, Object... place) {
        return redisTemplate.opsForGeo().position(key, place);
    }

    @Override
    public Distance geoCalculationDistance(String key, String placeOne, String placeTow) {
        return redisTemplate.opsForGeo()
                .distance(key, placeOne, placeTow, RedisGeoCommands.DistanceUnit.KILOMETERS);
    }

    @Override
    public GeoResults> geoNearByPlace(String key, String place, Distance distance, long limit, Sort.Direction sort) {
        RedisGeoCommands.GeoRadiusCommandArgs args = RedisGeoCommands.GeoRadiusCommandArgs.newGeoRadiusArgs().includeDistance().includeCoordinates();
        // 判断排序方式
        if (Sort.Direction.ASC == sort) {
            args.sortAscending();
        } else {
            args.sortDescending();
        }
        args.limit(limit);
        return redisTemplate.opsForGeo()
                .radius(key, place, distance, args);
    }

    @Override
    public List geoGetHash(String key, String... place) {
        return redisTemplate.opsForGeo()
                .hash(key, place);
    }

}


您可能感兴趣的文档:

--结束END--

本文标题: RedisTemplate常用方法封装

本文链接: https://www.lsjlt.com/news/8409.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • RedisTemplate常用方法封装
    RedisTemplate常用方法封装 序列化和配置 package com.gitee.ccsert.mall.common.redis.config; import com.fasterxml.jackson.annotation....
    99+
    2014-05-04
    RedisTemplate常用方法封装
  • RedisTemplate常用方法总结
    目录String类型Hash类型 List类型 Set类型 zSet类型 参考: Redis常用的数据类型: String Hash List Se...
    99+
    2022-11-12
  • 常用的前端JavaScript方法封装
    目录1、输入一个值,返回其数据类型**2、数组去重3、字符串去重4、深拷贝 浅拷贝5、reverse底层原理和扩展6、圣杯模式的继承7、找出字符串中第一次只出现一次的字母8、找元素的...
    99+
    2022-11-12
  • JavaScript常用方法和封装详情
    目录1.字符串相关1.1 format方法2.数组相关1.2 forEach(callback,context) 操作数组中的每一个元素1.3 indexOf(searchvalue...
    99+
    2022-11-13
  • PHP常见方法封装总结
    目录1.get请求2.post请求3.随机字符串4.返回json数据5.数据过滤6.重定向7.获取客户端ip1.get请求 function get_curl($url, $time...
    99+
    2022-11-13
  • CSS常用的封装方法有哪些
    小编给大家分享一下CSS常用的封装方法有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1. pc-reset PC样式初始化html {  line-height: 1.15;&...
    99+
    2023-06-08
  • nodejs各类数据库常用方法封装
    在Node.js中,常见的数据库有MySQL、MongoDB、Redis等。下面是各类数据库常用方法的封装示例。1. MySQL数据...
    99+
    2023-09-21
    nodejs
  • JavaScript常用方法和封装实例分析
    这篇文章主要介绍了JavaScript常用方法和封装实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JavaScript常用方法和封装实例分析文章都会有所收获,下面我们一起来看看吧。1.字符串相关1.1 ...
    99+
    2023-06-29
  • RedisTemplate常用操作方法总结(set、hash、list、string等)
    目录String类型Hash类型List类型Set类型zSet类型Redis常用的数据类型: StringHashListSetzSetSorted set String类型 保存和...
    99+
    2022-11-13
  • web前端中常用的封装方法是什么
    本篇内容介绍了“web前端中常用的封装方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! &nbs...
    99+
    2022-10-19
  • CSS和JavaScript常用工具封装方法是什么
    这篇文章主要介绍“CSS和JavaScript常用工具封装方法是什么”,在日常操作中,相信很多人在CSS和JavaScript常用工具封装方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”CSS和Jav...
    99+
    2023-06-04
  • uni-app封装请求方法与api封装调用
    封装请求创建request.js文件,把一下内容根据自己的需求更改。 //封装请求方法//声明一个请求函数const api_request=(url, method, parm)=>{ con...
    99+
    2023-09-03
    前端 php 开发语言 javascript vue.js
  • vue方法封装并使用
    Vue是一种流行的JavaScript框架,它将数据和UI进行了强大的绑定,并提供了许多有用的功能。在Vue应用程序中,您可能需要编写一些通用的方法,这些方法将在整个应用程序中使用。为了提高代码的可重用性和可维护性,最好将这些方法封装成Vu...
    99+
    2023-05-20
  • 分享JavaScript和CSS常用工具方法封装教程
    本篇内容介绍了“分享JavaScript和CSS常用工具方法封装教程”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学...
    99+
    2022-10-19
  • promise封装wx.request的方法
    上篇文章给大家介绍了使用Promise封装小程序wx.request的实现方法,本文重点给大家介绍promise封装wx.request的方法,具体内容如下所示: 为什么要封装wx....
    99+
    2022-11-12
  • php封装app的方法
    本文操作环境:windows7系统、PHP7.4版、DELL G3电脑使用php封装APP接口php封装APP接口我们先来介绍Json的封装方法 json_encode函数传递中文的话,输出后是乱码的,针对这个问题我觉得有必要做一个解释: ...
    99+
    2016-12-05
    php app
  • javascript怎么封装方法
    这篇文章主要讲解了“javascript怎么封装方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“javascript怎么封装方法”吧!什么是封装方法?封装方法是一种将一段代码封装成单个可重...
    99+
    2023-07-06
  • RedisTemplate方法如何在spring中使用
    本篇文章给大家分享的是有关RedisTemplate方法如何在spring中使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。需要的jar包 spring-data-Redis...
    99+
    2023-05-31
    spring redistemplate emp
  • Node.js模块封装及使用方法
    Node.js中也有一些功能的封装,类似C#的类库,封装成模块这样方便使用,安装之后用require()就能引入调用. 一、Node.js模块封装 1.创建一个名为censorify的文件夹 2.在ce...
    99+
    2022-06-04
    使用方法 模块 Node
  • ahooks封装cookie localStorage sessionStorage方法
    目录引言cookielocalStorage/sessionStorage总结与归纳引言 本文是深入浅出 ahooks 源码系列文章的第九篇,这个系列的目标主要有以下几点: 加深对 ...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作