zoukankan      html  css  js  c++  java
  • springboot + redis

    1.添加依赖包

    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>

    2.配置redis属性

    spring.redis.database=0
    spring.redis.host=127.0.0.1
    spring.redis.port=6379
    spring.redis.password=
    spring.redis.pool.max-active=8
    spring.redis.pool.max-wait=-1
    spring.redis.pool.max-idle=8
    spring.redis.pool.min-idle=0
    spring.redis.timeout=0

    3.创建redis缓存类----》RedisCacheConfig.java

    @Configuration
    @EnableCaching
    public class RedisCacheConfig {
    @Bean
    public CacheManager cacheManager(RedisTemplate<?, ?> redisTemplate){
    CacheManager cacheManager = new RedisCacheManager(redisTemplate);
    return cacheManager;
    }
    @Bean
    public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory){
    RedisTemplate<String, String> redisTemplate = new RedisTemplate<String,String>();
    redisTemplate.setConnectionFactory(factory);
    // key序列化方式;(不然会出现乱码;),但是如果方法上有Long等非String类型的话,会报类型转换错误;
    // 所以在没有自己定义key生成策略的时候,以下这个代码建议不要这么写,可以不配置或者自己实现ObjectRedisSerializer
    // 或者JdkSerializationRedisSerializer序列化方式;
    RedisSerializer<String> redisSerializer = new StringRedisSerializer();// Long类型不可以会出现异常信息;
    redisTemplate.setKeySerializer(redisSerializer);
    redisTemplate.setHashKeySerializer(redisSerializer);
    return redisTemplate;
    }
    }

    4.创建redis工具类----》RedisUtil.java

    @SuppressWarnings("unchecked")
    @Component
    public class RedisUtil {
    @SuppressWarnings("rawtypes")
    @Autowired
    private RedisTemplate redisTemplate;
    /**
    * 批量删除对应的value
    *
    * @param keys
    */
    public void remove(final String... keys) {
    for (String key : keys) {
    remove(key);
    }
    }
    /**
    * 批量删除key
    *
    * @param pattern
    */
    public void removePattern(final String pattern) {
    Set<Serializable> keys = redisTemplate.keys(pattern);
    if (keys.size() > 0)
    redisTemplate.delete(keys);
    }
    /**
    * 删除对应的value
    *
    * @param key
    */
    public void remove(final String key) {
    if (exists(key)) {
    redisTemplate.delete(key);
    }
    }
    /**
    * 判断缓存中是否有对应的value
    *
    * @param key
    * @return
    */
    public boolean exists(final String key) {
    return redisTemplate.hasKey(key);
    }
    /**
    * 读取缓存
    *
    * @param key
    * @return
    */
    public String get(final String key) {
    Object result = null;
    redisTemplate.setValueSerializer(new StringRedisSerializer());
    ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();
    result = operations.get(key);
    if(result==null){
    return null;
    }
    return result.toString();
    }
    /**
    * 写入缓存
    *
    * @param key
    * @param value
    * @return
    */
    public boolean set(final String key, Object value) {
    boolean result = false;
    try {
    ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();
    operations.set(key, value);
    result = true;
    } catch (Exception e) {
    e.printStackTrace();
    }
    return result;
    }
    /**
    * 写入缓存
    *
    * @param key
    * @param value
    * @return
    */
    public boolean set(final String key, Object value, Long expireTime) {
    boolean result = false;
    try {
    ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();
    operations.set(key, value);
    redisTemplate.expire(key, expireTime, TimeUnit.SECONDS);
    result = true;
    } catch (Exception e) {
    e.printStackTrace();
    }
    return result;
    }

    public boolean hmset(String key, Map<String, String> value) {
    boolean result = false;
    try {
    redisTemplate.opsForHash().putAll(key, value);
    result = true;
    } catch (Exception e) {
    e.printStackTrace();
    }
    return result;
    }

    public Map<String,String> hmget(String key) {
    Map<String,String> result =null;
    try {
    result= redisTemplate.opsForHash().entries(key);
    } catch (Exception e) {
    e.printStackTrace();
    }
    return result;
    }
    }

    5.编写测试代码(以统计用户个数为例,将用户个数写入缓存,然后读取)

    1.通过定时任务获取用户个数,并写入缓存

    @Scheduled(cron = "*/10 * * * * ?")
    public void runJobA(){
    Long userCount = 0l;
    List<SysUser> list = sysUserService.getUserList(null, null, null);
    if(list != null){
    userCount = (long) list.size();
    }
    System.out.println(userCount);
    redisUtil.set("userCount", userCount.toString(), 100l);
    }

    2.从缓存获取用户个数

    在SysUserController.java中添加以下代码

    @RequestMapping(value="/getUserCount")

    @ResponseBody
    public String getUserCount(){
    return sysUserService.getUserCount();
    }

    在SysUserService.java添加以下代码

    public String getUserCount(){
    return redisUtil.get("userCount");
    }

    6.测试

  • 相关阅读:
    jQuery 基本选择器
    JavaScriptif while for switch流程控制 JS函数 内置对象
    JavaScrip基本语法
    数据库 存储引擎 表的操作 数值类型 时间类型 字符串类型 枚举集合 约束
    数据库基础知识 管理员 用户登录授权的操作
    粘包的产生原理 以及如何解决粘包问题
    socket TCP DPT 网络编程
    2018年年终总结
    Android技术分享
    No accelerator found
  • 原文地址:https://www.cnblogs.com/chao555/p/9037291.html
Copyright © 2011-2022 走看看