Redis自定义RedisTemplate与封装java中Redis操作

前话

为啥要自定义RedisTemplate ?
因为默认的RedisTemplate使用JdkSerializationRedisSerializer序列化。
用JdkSerializationRedisSerializer序列化的话,被序列化的对象必须实现Serializable接口。在存储内容时,除了属性的内容外还存了其它内容在里面(比如转义字符等),总长度长,且不容易阅读。所有我们可以使用自定义RedisTemplate来避免这一问题。

为啥封装java中Redis操作
因为java原生的Redis操作代码过长,而且这些操作使用频率又高,所有完全可以自己封装一下,提高代码阅读性。

自定义RedisTemplate

官方依据:


 @Bean
 @ConditionalOnMissingBean(name = {"redisTemplate"})//如果存在名称为redisTemplat的bean就不会调用该方法生成新的bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
        RedisTemplate<Object, Object> template = new RedisTemplate();
        template.setConnectionFactory(redisConnectionFactory);
        return template;
    }

RedisTemplate中的四种序列化器


	@SuppressWarnings("rawtypes") private @Nullable RedisSerializer keySerializer = null;
	@SuppressWarnings("rawtypes") private @Nullable RedisSerializer valueSerializer = null;
	@SuppressWarnings("rawtypes") private @Nullable RedisSerializer hashKeySerializer = null;
	@SuppressWarnings("rawtypes") private @Nullable RedisSerializer hashValueSerializer = null;

RedisSerializer的几个实现类
在这里插入图片描述
自定义RedisTemplate

/**
 * @ClassName RedisConfig
 * @Description: 自定义RedisTemplate
 * @Author ldg
 * @Date 2020/5/27 16:37
 * @Version V1.0
 **/
@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
        //常用<String,Object>
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        //设置默认序列化方式 可以是:Jackson2JsonRedisSerializer GenericJackson2JsonRedisSerializer
        redisTemplate.setDefaultSerializer(new GenericJackson2JsonRedisSerializer());
        //声明字符串序列化方式
        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
        //设置key以字符串序列化
        redisTemplate.setKeySerializer(stringRedisSerializer);
        redisTemplate.setHashKeySerializer(stringRedisSerializer);

        return redisTemplate;


    }


}

Redis操作简易封装

/**
 * @ClassName RedisTool
 * @Description: 对java中Redis的一些操作的封装
 * @Author ldg
 * @Date 2020/5/27 17:50
 * @Version V1.0
 **/
@Component
public class RedisTool {

    @Autowired
    RedisTemplate redisTemplate;

    /**
     * String值的写入
     * @param key   键
     * @param value 值
     */
    public void set(String key, String value) {
        redisTemplate.opsForValue().set(key, value);
    }

    /**
     * String值获取
     * @param key
     * @return
     */
    public Object get(String key) {
        return redisTemplate.opsForValue().get(key);
    }

    /**
     *Hash值的全部写入
     * @param key
     * @param map
     */
    public  void   hSetAll(String  key,Map map)
    {
        redisTemplate.opsForHash().putAll(key,map);
    }

    /**
     * Hash值一个一个写入
     * @param key  键
     * @param filed hash中的键
     * @param value hash中的值
     */
    public  void  hSet(String key,String filed,String  value)
    {
          redisTemplate.opsForHash().put(key,filed,value);
    }

    /**
     * 获取Hash中的一个值
     * @param key 键
     * @param hashKey Hash中的键
     * @return
     */
    public  Object  hGet(String key,String hashKey)
    {
       return  redisTemplate.opsForHash().get(key,hashKey);
    }

    /**
     * 获取Hash中多个值
     * @param key 键
     * @param collection  Hash中多给键
     * @return
     */
    public  List<Object> hGetAll(String key, Collection<String> collection)
    {
        return  redisTemplate.opsForHash().multiGet(key,collection);
    }


}

注意一下:Redis服务端如果部署再云服务器上,那么redis.config文件中的bind ip是指绑定服务器的网卡ip (一般有两个:一个是127.0.0.1,还有一个是服务器所给的内网ip)

测试截图

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值