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