zoukankan      html  css  js  c++  java
  • SpringBoot整合redis中setBit,getBit进行点赞

    redis中的工具类

    package com.showy.bbs.custom;
    
    import org.springframework.data.redis.core.RedisCallback;
    import org.springframework.data.redis.core.StringRedisTemplate;
    
    import static java.util.Objects.hash;
    
    /**
    * @author  
    * @Date 2021-03-02
    */
    public class RedisTemplateUtil {
        private static  StringRedisTemplate stringRedisTemplate = SpringUtils.getBean(StringRedisTemplate.class);
        /**
         * 将指定param的值设置为1,{@param param}会经过hash计算进行存储。
         *
         * @param key   bitmap结构的key
         * @param param 要设置偏移的key,该key会经过hash运算。
         * @param value true:即该位设置为1,否则设置为0
         * @return 返回设置该value之前的值。
         */
        public static Boolean setBit(String key, String param, boolean value) {
            return stringRedisTemplate.opsForValue().setBit(key, hash(param), value);
        }
    
        /**
         * 将指定param的值设置为0,{@param param}会经过hash计算进行存储。
         *
         * @param key   bitmap结构的key
         * @param param 要移除偏移的key,该key会经过hash运算。
         * @return 若偏移位上的值为1,那么返回true。
         */
        public static Boolean getBit2(String key, String param) {
            return stringRedisTemplate.opsForValue().getBit(key, hash(param));
        }
    
    
        /**
         * 将指定offset偏移量的值设置为1;
         *
         * @param key    bitmap结构的key
         * @param offset 指定的偏移量。
         * @param value  true:即该位设置为1,否则设置为0
         * @return 返回设置该value之前的值。
         */
        public static Boolean setBit(String key, Long offset, boolean value) {
            return stringRedisTemplate.opsForValue().setBit(key, offset, value);
        }
    
        /**
         * 将指定offset偏移量的值设置为0;
         *
         * @param key    bitmap结构的key
         * @param offset 指定的偏移量。
         * @return 若偏移位上的值为1,那么返回true。
         */
        public static Boolean getBit(String key, long offset) {
            return stringRedisTemplate.opsForValue().getBit(key, offset);
        }
    
        /**
         * 统计对应的bitmap上value为1的数量
         *
         * @param key bitmap的key
         * @return value等于1的数量
         */
        public static Long bitCount(String key) {
            return stringRedisTemplate.execute((RedisCallback<Long>) con -> con.bitCount(key.getBytes()));
        }
    
        /**
         * 统计指定范围中value为1的数量
         *
         * @param key   bitMap中的key
         * @param start 该参数的单位是byte(1byte=8bit),{@code setBit(key,7,true);}进行存储时,单位是bit。那么只需要统计[0,1]便可以统计到上述set的值。
         * @param end   该参数的单位是byte。
         * @return 在指定范围[start*8,end*8]内所有value=1的数量
         */
        public static Long bitCount(String key, int start, int end) {
            return stringRedisTemplate.execute((RedisCallback<Long>) con -> con.bitCount(key.getBytes(), start, end));
        }
    
    }
    

      bean注入

    package com.showy.bbs.custom;
    
    import org.springframework.beans.BeansException;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.ApplicationContextAware;
    import org.springframework.stereotype.Component;
    
    @Component
    public class SpringUtils implements ApplicationContextAware {
        private static ApplicationContext applicationContext;
    
        public static ApplicationContext getApplicationContext() {
            return applicationContext;
        }
        @Override
        public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
            if (SpringUtils.applicationContext == null) {
                SpringUtils.applicationContext = applicationContext;
            }
        }
        public static Object getBean(String name) {
            return getApplicationContext().getBean(name);
        }
    
        public static <T> T getBean(Class<T> c) {
            return getApplicationContext().getBean(c);
        }
    
        public static <T> T getBean(String name, Class<T> c) {
            return getApplicationContext().getBean(name, c);
        }
    }

    https://www.jianshu.com/p/305e65de1b13?from=singlemessage

  • 相关阅读:
    Arduino 各种模块篇 DHT11 温度湿度 数字模块 单总线
    Arduino 各种模块篇 火焰传感器
    exception
    google c++ code style
    昙花一现
    晏才宏
    win 2003 玩3D游戏设置
    生成多文件的Assembly 的两种方法
    怎样使自己写的程序集出现在Visual Studio Add Reference 的 .NET Tab页中
    安装将仅在管理模式下运行,安装终止
  • 原文地址:https://www.cnblogs.com/wsycoo/p/14684185.html
Copyright © 2011-2022 走看看