package com.yxb.common.redis;
import com.yxb.base.util.CommonUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.InvalidDataAccessApiUsageException;
import org.springframework.data.redis.connection.DataType;
import org.springframework.data.redis.core.*;
import org.springframework.stereotype.Repository;
import java.util.*;
import java.util.concurrent.TimeUnit;
@Repository("redisDao")
public class RedisDao {
@Autowired
private StringRedisTemplate redisTemplate;
private static Logger logger = LoggerFactory.getLogger(RedisDao.class);
/**
* 设置对象
* */
public <T> boolean set(String key, T value) {
boolean result = false;
try {
String str = CommonUtil.beanToString(value);
ValueOperations<String, String> valueOperations = redisTemplate.opsForValue();
valueOperations.set(key,str);
result = true;
}catch (Exception e){
logger.error("redis set error key={},value={}",key,value,e);
}
return result;
}
/**
* 带过期时间
* @param key
* @param value
* @param timeout 过期时间(单位:秒)
* @param <T>
* @return
*/
public <T> boolean set(String key,T value, Integer timeout){
boolean result = false;
String str = CommonUtil.beanToString(value);
try {
ValueOperations<String, String> valueOperations = redisTemplate.opsForValue();
valueOperations.set(key,str,timeout.longValue(), TimeUnit.SECONDS);
result = true;
}catch (Exception e){
logger.error("redis set error key={},value={},timeout={}",key,str,timeout,e);
}
return result;
}
//带过期时间类型
public <T> boolean set(String key,T value,Integer timeout, TimeUnit unit){
String str = CommonUtil.beanToString(value);
try {
ValueOperations<String, String> valueOperations = redisTemplate.opsForValue();
valueOperations.set(key,str,timeout.longValue(),unit);
}catch (Exception e){
logger.error("redis set error key={},value={},timeout={},unit={}",key,str,timeout,unit,e);
return false;
}
return true;
}
//通过key获取value
public <T> T get(String key,Class<T> clazz){
String result = null;
try{
ValueOperations<String, String> valueOperations = redisTemplate.opsForValue();
result = valueOperations.get(key);
}catch (Exception e){
logger.error("redis get error key={}",key,e);
}
T t = CommonUtil.stringToBean(result,clazz);
return t;
}
//删除key
public boolean del(String key){
boolean result = false;
try{
redisTemplate.delete(key);
result = true;
}catch (Exception e){
logger.error("redis del error key={}",key,e);
}
return result;
}
public boolean delCollection(Set<String> keys){
boolean result = false;
try{
redisTemplate.delete(keys);
result = true;
}catch (Exception e){
logger.error("redis delCollection error key={}",keys.toString(),e);
}
return result;
}
//判断key是否存在
public boolean hasKey(String key){
boolean result = false;
try{
result = redisTemplate.hasKey(key);
}catch (Exception e){
logger.error("redis hasKey error key = {}",key,e);
}
return result;
}
//递增 递减
public long increment(String key, Integer delta){
try{
ValueOperations<String, String> valueOperations = redisTemplate.opsForValue();
return valueOperations.increment(key, delta.longValue());
}catch (Exception e){
logger.error("redis increment error key = {}, delta = {}", key, delta, e);
}
return 0;
}
/**
* 递增和递减 如果key在redis中不存在(即第一次往redis中放这个key),则设置该key的过期时间timeout
* @param key
* @param delta
* @param timeout 单位是秒
* @return
*/
public long increment(String key, Integer delta, Integer timeout){
try{
boolean hasKey = false;
if(!hasKey(key)){
hasKey = true;
}
long value = increment(key, delta);
if(hasKey){
expire(key,timeout);
}
return value;
}catch (Exception e){
logger.error("redis increment error key = {}, delta = {}", key, delta, e);
}
return 0;
}
//设置key的过期时间
public boolean expire(String key,Integer timeout){
boolean result = false;
try{
redisTemplate.expire(key,timeout.longValue(),TimeUnit.SECONDS);
result = true;
}catch (Exception e){
logger.error("redis expire error key = {}", key, e);
}
return result;
}
//设置key的过期时间(自定义时间单位)
public boolean expire(String key, Integer timeout, TimeUnit timeUnit){
boolean result = false;
try{
redisTemplate.expire(key,timeout.longValue(),timeUnit);
result = true;
}catch (Exception e){
logger.error("redis expire error key = {}", key, e);
}
return result;
}
//获取key的过期时间 返回秒
public long ttl(String key){
try{
long time = redisTemplate.getExpire(key,TimeUnit.SECONDS);
return time;
}catch (Exception e){
logger.error("redis expire error key = {}", key, e);
}
return (long)0;
}
//--------------Map-----------------//
//put整个map
public boolean putAll(String key, Map map){
boolean result = false;
try{
HashOperations<String, String, String> options = redisTemplate.opsForHash();
options.putAll(key,map);
result = true;
}catch (Exception e){
logger.error("redis putAll error key={},map={}",key,map,e);
}
return result;
}
//带过期时间 单位是秒
public boolean putAll(String key, Map map,Integer timeout){
boolean result = false;
try{
HashOperations<String, String, String> options = redisTemplate.opsForHash();
options.putAll(key,map);
redisTemplate.expire(key,timeout.longValue(),TimeUnit.SECONDS);
result = true;
}catch (Exception e){
logger.error("redis putAll error key={},map={}",key,map,e);
}
return result;
}
//map中放单个键值对
public boolean put(String key,String hashKey,String hashValue){
boolean result = false;
try{
HashOperations<String, String, String> options = redisTemplate.opsForHash();
options.put(key,hashKey,hashValue);
result = true;
}catch (Exception e){
logger.error("redis put error key={},hashKey={},hashValue={}",key,hashKey,hashValue,e);
}
return result;
}
//判断map中hashKey是否存在
public boolean hasKey(String key,String hashKey){
try{
HashOperations<String, String, String> options = redisTemplate.opsForHash();
return options.hasKey(key,hashKey);
}catch (Exception e){
logger.error("redis hasKey error key={},hashKey={}",key,hashKey,e);
}
return false;
}
//get 获取map中键的值
public String getHashValue(String key,String hashKey){
try{
HashOperations<String, String, String> options = redisTemplate.opsForHash();
return options.get(key,hashKey);
}catch (Exception e){
logger.error("redis get error key={},hashKey={}",key,hashKey,e);
}
return null;
}
//multiGet 获取多个value
public List<String> multiGet(String key, Collection<String> fields){
try{
HashOperations<String, String, String> options = redisTemplate.opsForHash();
return options.multiGet(key,fields);
}catch(Exception e){
logger.error("redis multiGet error key={},hashKey={}",key,fields,e);
}
return null;
}
//delete 删除map中的key 可以是多个
public long delete(String key,String... hashKeys){
try{
HashOperations<String, String, String> options = redisTemplate.opsForHash();
return options.delete(key,hashKeys);
}catch (Exception e){
logger.error("redis delete error key={},hashKeys={}",key,hashKeys,e);
}
return 0;
}
//increment map中的key对应的value 做递增操作
public long increment(String key,String hashKey,Integer delta){
try {
HashOperations<String, String, String> options = redisTemplate.opsForHash();
return options.increment(key,hashKey,delta.longValue());
}catch (Exception e){
logger.error("redis delete error key={},hashKey={},delta={}",key,hashKey,delta,e);
}
return 0;
}
//keys 获取map中的所有的keys
public Set<String> keys(String key){
try{
HashOperations<String, String, String> options = redisTemplate.opsForHash();
return redisTemplate.keys(key);
// return options.keys(key);
}catch (Exception e){
logger.error("redis keys error key={}",key,e);
}
return null;
}
//keys 获取map中的所有的map
public Map<String,String> entries(String key){
try{
HashOperations<String, String, String> options = redisTemplate.opsForHash();
return options.entries(key);
}catch (Exception e){
logger.error("redis keys error key={}",key,e);
}
return null;
}
/**
* 往redis中放入set
* @param key
* @param time 过期时间 可传null null代表不设置过期时间
* @param values
* @return
*/
public long sAdd(String key,Integer time,String... values){
try{
SetOperations<String,String> setOperations = redisTemplate.opsForSet();
//the number of elements that were added to the set,
// not including all the elements already present into the set.
long n = setOperations.add(key,values);
if(time != null){
expire(key,time);
}
return n;
}catch (Exception e){
logger.error("redis set add error ",e);
}
return 0;
}
//判断value 是否是 keySet中的元素
public boolean sIsMember(String key,String value){
try{
SetOperations<String,String> setOperations = redisTemplate.opsForSet();
return setOperations.isMember(key,value);
}catch (InvalidDataAccessApiUsageException e1){
this.del(key);
}catch(Exception e){
logger.error("redis set sisMember error",e);
}
return false;
}
//redis set 移除
public long sRem(String key,String... hashKeys){
try {
SetOperations<String,String> setOperations = redisTemplate.opsForSet();
//the number of members that were removed from the set,
// not including non existing members
return setOperations.remove(key,hashKeys);
}catch (Exception e){
logger.error("redis set sRem error",e);
}
return 0;
}
//the cardinality (number of elements) of the set, or 0 if key does not exist.
public long sCard(String key){
try{
SetOperations<String,String> setOperations = redisTemplate.opsForSet();
long n = setOperations.size(key);
// setOperations.members();
return n;
}catch(Exception e){
logger.error("redis set sSize error ",e);
}
return 0;
}
/**
* 返回当前key下的集合
* @param key
* @return
*/
public Set<String> members(String key){
Set<String> set = null;
try {
SetOperations<String, String> setOperations = redisTemplate.opsForSet();
set = setOperations.members(key);
return set;
}catch (InvalidDataAccessApiUsageException e1){
this.del(key);
}catch(Exception e){
logger.error("redis members sSize error ",e);
}
return set;
}
/****************************** ZSET start ************************/
/**
* 往zset中放入一个value
* @param key redis的key
* @param value redis中保存的value
* @param score value对应的分值
* @return
*/
public boolean zAdd(String key,String value,double score){
try{
ZSetOperations<String,String> zSetOperations = redisTemplate.opsForZSet();
return zSetOperations.add(key,value,score);
}catch(Exception e){
logger.error("redis zset zadd error e:{}",e);
}
return false;
}
/**
* 从zset中删除一个value
* @param key redis的key
* @param value redis的key中要删除的value
* @return
*/
public boolean zRem(String key,String... value){
try{
ZSetOperations<String,String> zSetOperations = redisTemplate.opsForZSet();
long row = zSetOperations.remove(key,value);
return row > 0 ?true:false;
}catch(Exception e){
logger.error("redis zset remove error e:{}",e);
}
return false;
}
/**
* 返回value在redis的key中的排名 有小到大的排名 分数最小的,排名为1
* @param key redis中的key
* @param value
* @return
*/
public long zRank(String key,String value){
try{
ZSetOperations<String,String> zSetOperations = redisTemplate.opsForZSet();
return (zSetOperations.rank(key,value)+1);
}catch(Exception e){
logger.error("redis zset zRank error e:{}",e);
}
return 0;
}
/**
* 返回value在redis的key中的排名,有大到小排名 分数最大的,排名为1
* @param key redis中的key
* @param value
* @return
*/
public long zRevRank(String key,String value){
try{
ZSetOperations<String,String> zSetOperations = redisTemplate.opsForZSet();
Long res = zSetOperations.reverseRank(key,value);
if(null == res){
return 0;
}else
return res + 1;
}catch(Exception e){
logger.error("redis zset zRevRank error e:{}",e);
}
return 0;
}
/**
* 返回redis的key中的成员数
* @param key
* @return
*/
public long zCard(String key){
try{
ZSetOperations<String,String> zSetOperations = redisTemplate.opsForZSet();
return zSetOperations.zCard(key);
}catch (Exception e){
logger.error("redis zset zCard error e:{}",e);
}
return 0;
}
/**
* 在redis的key中对应的value 增加 delta分值
* @param key
* @param value
* @param delta
* @return
*/
public double zIncrby(String key,String value,double delta){
try{
ZSetOperations<String,String> zSetOperations = redisTemplate.opsForZSet();
return zSetOperations.incrementScore(key,value,delta);
}catch (Exception e){
logger.error("redis zset zCard error e:{}",e);
}
return 0;
}
public double zIncrby(String key,String value,double delta,Long secend){
try{
ZSetOperations<String,String> zSetOperations = redisTemplate.opsForZSet();
double d = zSetOperations.incrementScore(key,value,delta);
redisTemplate.expire(key,secend,TimeUnit.SECONDS);
}catch (Exception e){
logger.error("redis zset zCard error e:{}",e);
}
return 0;
}
/**
* 返回redis的key中从start到end结束的集合 start,end表示的是下标 下标从0开始 返回的数据中包含下标为start和end的值
* 其中-1代表最后一个成员,-2代表倒数第二个成员 start=0 end=-1 代表返回整个有序集合
* 注意:该接口返回的是有小到大的排列顺序 如需返回有大到小 请调用 zRevrange 接口
* @param key
* @param start
* @param end
* @return
*/
public Set<String> zRange(String key,Integer start,Integer end){
try{
ZSetOperations<String,String> zSetOperations = redisTemplate.opsForZSet();
return zSetOperations.range(key,start.longValue(),end.longValue());
}catch (Exception e){
logger.error("redis zset zRange error e:{}",e);
}
return new HashSet<String>();
}
public Map<String,Double> zRangeWithScores(String key,Integer start,Integer end){
try{
ZSetOperations<String,String> zSetOperations = redisTemplate.opsForZSet();
Set<ZSetOperations.TypedTuple<String>> set = zSetOperations.rangeWithScores(key,start.longValue(),end.longValue());
Map<String,Double> idAndScores = new HashMap<>();
for (ZSetOperations.TypedTuple<String> z : set){
idAndScores.put(z.getValue(),z.getScore());
}
return idAndScores;
}catch (Exception e){
logger.error("redis zset zRange error e:{}",e);
}
return new HashMap<>();
}
/**
* 返回redis的key中从start到end结束的集合 start,end表示的是下标 下标从0开始 返回的数据中包含下标为start和end的值
* 其中-1代表最后一个成员,-2代表倒数第二个成员 start=0 end=-1 代表返回整个有序集合
* 注意:该接口返回的是有大到小的排列顺序 如需返回有小到大 请调用 zRange 接口
* @param key
* @param start
* @param end
* @return
*/
public Set<String> zRevrange(String key,Integer start,Integer end){
try{
ZSetOperations<String,String> zSetOperations = redisTemplate.opsForZSet();
return zSetOperations.reverseRange(key,start.longValue(),end.longValue());
}catch (Exception e){
logger.error("redis zset zRange error e:{}",e);
}
return new HashSet<String>();
}
/**
* 返回value在key中排名的分数值
* @param key
* @param value
* @return
*/
public double zScore(String key,String value){
try{
ZSetOperations<String,String> zSetOperations = redisTemplate.opsForZSet();
Double db = zSetOperations.score(key,value);
return db==null?0:db;
}catch(Exception e){
logger.error("redis zset zscore error e:{}",e);
}
return 0;
}
/****************************** ZSET end ************************/
/******************************List start************************/
/**
* 类似于压栈操作,将元素放入头部
* @param key
* @param object
* @return
*/
public long leftPush(String key,Object object){
try{
ListOperations listOperations = redisTemplate.opsForList();
long n = listOperations.leftPush(key,object);
return n;
}catch (Exception e){
logger.error("redis leftPush error e:{}",e);
}
return 0;
}
/**
* 将元素push在list的尾部
* @param key
* @param object
* @return
*/
public long rightPush(String key,Object object){
try{
ListOperations listOperations = redisTemplate.opsForList();
long n = listOperations.rightPush(key,object);
return n;
}catch (Exception e){
logger.error("redis leftPush error e:{}",e);
}
return 0;
}
/**
* 删除尾部数据
* @param key
* @return
*/
public Object rightPop(String key){
try{
ListOperations listOperations = redisTemplate.opsForList();
Object o = listOperations.rightPop(key);
return o;
}catch (Exception e){
logger.error("redis leftPush error e:{}",e);
}
return null;
}
/**
* 删除首位数据
* @param key
* @return
*/
public Object leftPop(String key){
try{
ListOperations listOperations = redisTemplate.opsForList();
Object o = listOperations.leftPop(key);
return o;
}catch (Exception e){
logger.error("redis leftPop error e:{}",e);
}
return null;
}
/**
* 通过key和索引获取对象
* @param key
* @param index
* @return
*/
public Object getFromList(String key,Integer index){
try{
ListOperations listOperations = redisTemplate.opsForList();
Object o = listOperations.index(key,index.longValue());
return o;
}catch (Exception e){
logger.error("redis getFromList error e:{}",e);
}
return null;
}
/**
* 获取列表
* @param key
* @param start
* @param end
* @return
*/
public List<Object> range(String key,Integer start,Integer end){
try{
ListOperations listOperations = redisTemplate.opsForList();
List<Object> list = listOperations.range(key,start.longValue(),end.longValue());
return list;
}catch (Exception e){
logger.error("redis range error e:{}",e);
}
return null;
}
/**
* 获取列表全部
* @param key
* @return
*/
public List<Object> range(String key){
try{
ListOperations listOperations = redisTemplate.opsForList();
List<Object> list = listOperations.range(key, 0, -1);
return list;
}catch (Exception e){
logger.error("redis range error e:{}",e);
}
return null;
}
/**
* 删除集合指定元素
* @param key 集合key
* @param itme 集合中的指定元素
* @return
*/
public Long remove(String key, String itme) {
try {
ListOperations listOperations = redisTemplate.opsForList();
Long removeNum = listOperations.remove(key, 0, itme);
return removeNum;
} catch (Exception e) {
logger.error("redis range error e:{}",e);
}
return 0l;
}
/**
* 获取集合长度
* @param key
* @return
*/
public Long size(String key){
try{
ListOperations listOperations = redisTemplate.opsForList();
long n = listOperations.size(key);
return n;
}catch (Exception e){
logger.error("redis size error e:{}",e);
}
return null;
}
public Set<String> getKeysByLike(String cachePrefix) {
return redisTemplate.keys(cachePrefix);
}
/**
* 获取key类型
* @param key
* @return
*/
public DataType getKeysType(String key) {
return redisTemplate.type(key);
}
}
相关推荐
在Ubuntu上通过Wine完美运行企业微信的详细指南
本文提供了在Ubuntu系统上通过Wine兼容层安装和运行企业微信的详细教程。针对官方未提供Linux版本的痛点,指南推荐使用Ubuntu Kylin团队优化打包的Wine环境,通过简单的命令行步骤即可完成部署,并涵盖启动、中文输入法配置、文件管理等常见问题的解决方案,帮助用户实现高效、稳定的办公沟通。
redis的存值,取值,删除,判断是否过期
在redis中保存产品线信息,避免每次查询都从数据库查询 //存list结构的数据 List<Product> list = productMapper.getList(); for(Product product:list){ redisDao.put(CommonConstant.REDIS_PRODUCTLIST, product.getS...
Windows10 搭建 FTP 服务器
问题: 有这么一个需求,博主需要对班级同学的信息进行收集,同学的信息是一个个的文件, 正常是每个同学将自己的信息打包压缩通过 QQ 或者邮箱方式发送给博主, 博主一个个接收这些压缩包,然后进行解压,再统一放到一个文件夹下, 但是博主觉得这样子实在是太麻烦了,如果某一个同学的信息来回变动,就需要接收很多次,更改很多次, 另外如果消息过多还会产生漏掉某个同学的信息的问题。 解决方法: 如果可以使...
Redis缓存雪崩,穿透、multiGet 批量查询优化、pipeline 批量查询优化
一、缓存穿透的解决方案 为了演示缓存穿透,这里设置的redis是单机单实例。 二、缓存穿透之布隆过滤器 布隆过滤器能够迅速判断一个元素是否存在于集合里。 布隆过滤器缺点: 1.会有1%的误判率,误判概率越低,数组所占用的空间越长。 2.布隆过滤器的数据只能添加,不能移除,主要是由于多个数据可能存在于同一个位置,比如subCat:2、subCat:3。 3.维护起来比较麻烦,代码复杂。 三、缓存雪崩与预防 1.什么是缓存雪崩? 当在同一时刻缓存里有大量的key过期时间结束,此时有大
OpenFOAM算例文件结构深度解析:以cavity案例为例教你读懂每个文件夹的作用
本文以OpenFOAM经典cavity案例为例,深度解析CFD算例文件结构。详细阐述了0、constant、system三个核心目录的作用:0存放初始与边界条件,constant定义物理属性和网格,system控制求解策略。通过剖析关键文件,帮助用户理解每个参数的意义,掌握从读懂到定制算例的能力,为高效使用这一开源CFD工具奠定坚实基础。
自定义AOP实现注解式redis缓存
@Resource RedisCommonDao redisCommonDao; @Around("@annotation(appsinnovaCache)") public Object authentication(final ProceedingJoinPoint jp, AppsinnovaCache appsinnovaCache) throws Throwable { return this.aroundCacheMethod(jp,appsinno.
从SIGGRAPH审稿人视角看:什么样的TOG论文更容易被接收?
本文从SIGGRAPH审稿人视角深入解析TOG论文的审稿标准与投稿策略,揭示如何提升论文接收概率。重点探讨创新性、技术深度、实验验证等核心评分维度,并提供写作技巧与审稿意见应对策略,帮助研究者优化ACM Transactions on Graphics投稿质量。
redis 学习(五)
redis常用数据操作方法: package com.tryke.api.common.dao.redis.impl; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.ut
EMD (经验模态分解) 在 C++ 中的实现指南
EMD 是由 Norden E. Huang 等人在1998年提出的一种适用于非线性和非平稳信号的分析方法。对称性:IMF 的上下包络对称。零交叉点:IMF 的零交叉点数量与极值点数量相同或相差一个。本文详细介绍了如何在C++中实现EMD,包括理论背景、算法步骤、代码实现和优化等内容。通过丰富的代码示例和详细的解释,希望能够帮助读者掌握EMD的基本原理,并能够在实际项目中灵活应用。未来,随着信号处理技术的不断发展,EMD及其变种(如EEMD、CEEMDAN等)将继续在各个领域发挥重要作用。
利用GAT(图论分析工具箱)构建并分析大脑结构协变网络学习笔记
前言 前面我学习了利用DTI构建白质纤维脑网络,并采用GRETNA计算了小世界网络属性。阅读文献发现可以利用灰质体积或皮层指标(皮层厚度、折叠指数、沟深)等构建结构协变网络再进行网络拓扑属性的计算。因此,我采用前面提取的灰质体积和皮质数据进行了结构协变网络分析,特此写下笔记以便后面的学习。 一、数据准备 二、构建结构协变网络 三、全局属性的统计分析 四、局部属性的统计分析 五、网络攻击分析 六、度的分布 ..................
Redis常用操作工具类---包含单例和集群模式
接口: import java.util.List; import java.util.Map; import java.util.Set; /** * @Author: lcx * @Date: Created at 2018/8/18 13:40. * @Description: */ public interface JedisCommonDao { /** ...
从 RAP OData 到可交付的 SAP Fiori 应用:部署与授权全链路实战笔记
摘要:本文探讨了RAP开发中常见的交付误区,指出开发者预览(FEAP)并非可部署应用,强调从服务发布到业务应用落地的完整链路。文章详细对比了不同部署路径(ABAP/BTP),解析权限管理关键点(SAP_BR_DEVELOPER的临时性),并提供了标准授权组合方案(IAM+业务目录+角色)。通过"发运跟踪"案例,展示了从开发验证到生产部署的全流程,特别提醒注意开发环境与生产环境的权限差异,避免"开发机正常、生产机403"的典型问题。(149字)
Redis工具类
通过源码可以看出,SpringBoot自动帮我们在容器中生成了一个RedisTemplate和一个StringRedisTemplate。 看到这个**@ConditionalOnMissingBean注解后,就知道如果Spring容器中有了RedisTemplate对象了,这个自动配置的RedisTemplate不会实例化**。因此我们可以直接自己写个配置类,配置RedisTemplate。该注解核心作用是:当容器中不存在指定类型(或名称)的 Bean 时,才会创建当前注解标注的 Bean。代码如
VC中sqlite的使用
在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示
ssm框架搭建
这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载
Redis操作工具类
核心Redis操作工具类RedisOperateUtil如下,主要包括Redis键(Key)、字符串(String)、哈希(Hash)、列表(List)、集合(Set)等常用的操作。
win10 跳过U8环境检测的IE WebControls.rar
win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。
Redis工具类:RedisTemplate
/ hash的value序列化方式采用jackson第四步:创建JSON工具类try {return s;T t = null;
STM32F407中文手册
STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。
最全的Redis工具类
RedisUtil 介绍 最全的Java操作Redis的工具类,封装了对Redis五种基本类型的各种操作,力求符合Redis的原生操作,使用StringRedisTemplate实现! 快速导航: key命令操作 | String数据操作 | Hash数据操作 | List数据操作 | Set数据操作 | zSet数据操作 相关知识: Redis基础知识补充 | Spring集成Redis | ...
封装好的Redis工具类
文章目录redis工具类工具类一工具类二工具类三 redis工具类 工具类一 import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; imp
java redis 工具类_Java操作Redis工具类
packagejavax.utils;importjava.util.ArrayList;importjava.util.List;importredis.clients.jedis.JedisPoolConfig;importredis.clients.jedis.JedisShardInfo;importredis.clients.jedis.ShardedJedis;importredis....
Redis连接操作工具类
在开发过程中使用Redis,每个人都写一套,很是不方便,下面奉上RedisUtil工具类,包含获取连接,获取资源,释放资源,String、对象保存、删除等等操作 下面上代码: package com.jane.framework.redis; import com.jane.framework.common.util.ConstantsConfigureBean; import com.jane.framework.common.util.SpringContextUtil; import org.apa
233



被折叠的 条评论
为什么被折叠?



