首页 > 数据库 >开发- redis常用方法封装总结

开发- redis常用方法封装总结

时间:2022-12-20 15:01:29浏览次数:53  
标签:总结 封装 String redis param item key return redisTemplate


import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.SetOperations;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Service;


import java.io.Serializable;
import java.util.Collection;
import java.util.Set;
import java.util.concurrent.TimeUnit;


/**
* redis工具类
*/
@Service
@Slf4j
public class RedisService {
@Autowired
private RedisTemplate redisTemplate;
private static double size = Math.pow(2, 32);


/**
* 判断缓存中是否有对应的value
*
* @param key
* @return
*/
public boolean exists(final String key) {
return redisTemplate.hasKey(key);
}


/**
* 删除对应的value
*
* @param key
*/
public void remove(final String key) {
if (exists(key)) {
redisTemplate.delete(key);
}
}


/**
* 写入缓存
*
* @param key 缓存key
* @param value 缓存value
* @param expireTime 过期时间,秒
* @return
*/
public boolean set(final String key, Object value, Long expireTime) {
ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();
operations.set(key, value);
redisTemplate.expire(key, expireTime, TimeUnit.SECONDS);
return true;
}

/**
* 读取缓存
*
* @param key
* @return
*/
public Object get(final String key) {
Object result = null;
ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();
result = operations.get(key);
return result;
}



/**
* 原子递增
*
* @param key 键
* @param expireTime 过期时间,秒
* @return
*/
public Long incr(final String key, Long expireTime) {
ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();
Long increment = operations.increment(key);
redisTemplate.expire(key, expireTime, TimeUnit.SECONDS);
return increment;
}


/**
* 原子递增,永不过期
*
* @param key
* @return
*/
public Long incr(final String key) {
ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();
Long increment = operations.increment(key);
return increment;
}



/**
* 获得缓存的key列表
*
* @param pattern 字符串前缀
* @return 对象列表
*/
public Collection<String> keys(final String pattern)
{
return redisTemplate.keys(pattern);
}

// ================================set=================================
/**
* 向set中添加元素
* @param key
* @param values
* @return
*/
public Long addSet(String key, Object... values) {
SetOperations opsForSet = redisTemplate.opsForSet();
return opsForSet.add(key, values);
}


/**
* 获取set元素
* @param key
* @return
*/
public Set getSetMembers(String key) {
SetOperations opsForSet = redisTemplate.opsForSet();
return opsForSet.members(key);
}


/**
* set集合中是否存在指定元素
* @param key
* @param value
* @return
*/
public boolean setIsExist(String key,Object value){
SetOperations opsForSet = redisTemplate.opsForSet();
return opsForSet.isMember(key,value);
}


/**
* 移除set元素
* @param key
* @param values
* @return
*/
public Long removeSetMembers(String key, Object... values) {
SetOperations opsForSet = redisTemplate.opsForSet();
return opsForSet.remove(key, values);
}

// ================================Map=================================
/**
* HashGet
*
* @param key 键 不能为null
* @param item 项 不能为null
* @return 值
*/
public Object hget(String key, String item) {
return redisTemplate.opsForHash().get(key, item);
}

/**
* 获取hashKey对应的所有键值
*
* @param key 键
* @return 对应的多个键值
*/
public Map<Object, Object> hmget(String key) {
return redisTemplate.opsForHash().entries(key);
}

/**
* HashSet
*
* @param key 键
* @param map 对应多个键值
* @return true 成功 false 失败
*/
public boolean hmset(String key, Map<String, Object> map) {
try {
redisTemplate.opsForHash().putAll(key, map);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}

/**
* HashSet 并设置时间
*
* @param key 键
* @param map 对应多个键值
* @param time 时间(秒)
* @return true成功 false失败
*/
public boolean hmset(String key, Map<String, Object> map, long time) {
try {
redisTemplate.opsForHash().putAll(key, map);
if (time > 0) {
expire(key, time);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}

/**
* 向一张hash表中放入数据,如果不存在将创建
*
* @param key 键
* @param item 项
* @param value 值
* @return true 成功 false失败
*/
public boolean hset(String key, String item, Object value) {
try {
redisTemplate.opsForHash().put(key, item, value);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}

/**
* 向一张hash表中放入数据,如果不存在将创建
*
* @param key 键
* @param item 项
* @param value 值
* @param time 时间(秒) 注意:如果已存在的hash表有时间,这里将会替换原有的时间
* @return true 成功 false失败
*/
public boolean hset(String key, String item, Object value, long time) {
try {
redisTemplate.opsForHash().put(key, item, value);
if (time > 0) {
expire(key, time);
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}

/**
* 删除hash表中的值
*
* @param key 键 不能为null
* @param item 项 可以使多个 不能为null
*/
public void hdel(String key, Object... item) {
redisTemplate.opsForHash().delete(key, item);
}

/**
* 判断hash表中是否有该项的值
*
* @param key 键 不能为null
* @param item 项 不能为null
* @return true 存在 false不存在
*/
public boolean hHasKey(String key, String item) {
return redisTemplate.opsForHash().hasKey(key, item);
}

/**
* hash递增 如果不存在,就会创建一个 并把新增后的值返回
*
* @param key 键
* @param item 项
* @param by 要增加几(大于0)
* @return
*/
public double hincr(String key, String item, double by) {
return redisTemplate.opsForHash().increment(key, item, by);
}

/**
* hash递减
*
* @param key 键
* @param item 项
* @param by 要减少记(小于0)
* @return
*/
public double hdecr(String key, String item, double by) {
return redisTemplate.opsForHash().increment(key, item, -by);
}



}



标签:总结,封装,String,redis,param,item,key,return,redisTemplate
From: https://www.cnblogs.com/shirleyxueli/p/16994190.html

相关文章

  • 【Redis系列】- Redis 为什么这么快?
      1.背景Redis现在广泛应用于大中型互联网项目中,最重要的场景就是作为分布式缓存,来应对大流量高并发的冲击,那么为什么Redis有如此高的性能,这篇文章就来分析一下R......
  • 我的2022年-总结、感悟、碎碎念
    我的2022年-总结、感悟、碎碎念 又到年底了,总结下2022吧,今年还是蛮多收获和感悟的,感觉越发活的通透了些,有些事情我们无法把握,有些事情我们能把握。淡然面对无法把握的......
  • Python3 Robot Framework CustomLibrary 封装系统关键字(使用自定义函数)
    1.创建一个python文件,确认能够执行,放入任意一个目录(如C:\CustomLibrary\helloworld.py)。#-*-coding:utf-8-*-defhi(name):u'''接收一个名字,并问候.例如|......
  • Redis的AOF持久化
    介绍AOF日志AOF持久化是通过保存Redis服务器所执行的写命令来记录数据库状态。假设AOF日志记录了自Redis实例创建以来所有的修改性命令,那么就可以通过对一个空的......
  • Redis的数据持久化
    介绍Redis的数据持久化方案Redis的数据持久化主要有两大机制,AOF日志和RDB快照。AOF持久化是通过保存Redis服务器所执行的写命令来记录数据库状态。RDB持久化......
  • Redis的数据持久化
    介绍Redis的数据持久化方案Redis的数据持久化主要有两大机制,AOF日志和RDB快照。AOF持久化是通过保存Redis服务器所执行的写命令来记录数据库状态。RDB持久化......
  • 史上最全软件测试工程师常见的面试题总结(一)【多测师】
    1、jmeter的加密参数如何入参?  ==》通过beanshell脚本处理、然后通过变量形式去接受2、如果不是MD5,怎么实现加密参数入参  ==》通过AESRSA等等加密算法3、给你一个......
  • 生产环境 Redis 优化记录
    1.现状描述1.1.生产环境生产环境配置6套Redis服务。1、配置为3节点物理服务器的Redis缓存群集,通过控制应用的主、备处于不同的物理服务器实现Redis访问的高可用,按不同......
  • Java Selenium封装--RemoteWebElement
    packagecom.selenium.driver;importjava.sql.SQLException;importjava.util.List;importorg.json.JSONException;importorg.openqa.selenium.By;importorg.openqa.sel......
  • 动态规划问题总结
    动态规划题型难点首先找不到dp的规律是什么不知道什么时候开始,什么时候结束不知道该用遍历还是递归(这个其实两个都一样,只是看个人更喜欢用那一种)挨个解决首先对......