Redis缓存操作(添加缓存,删除缓存,修改缓存)的代码实现

看文章之前你需要了解Redis的数据类型 和数据类型的 相关方法

我这边简单介绍一下:

Redis支持五种数据类型:String(字符串),hash(哈希),list(列表),set(集合),zset(有序集合)

相关方法:

1.String(字符串):String是resid最基本的类型,一个key对应一个value。String类型是二进制安全的。string中可以包含任何数据。
set:添加/覆盖一个字符串或者数组类型
get:获取值
mget:获取多个key的值
DECR/INCR:数字类型的数据自增减和自增
DECRBY/INCRBY:数字类型数据减去某个指定的整数和增加某个指定的整数
INCRBYELOAT:数值类型增加一个浮点数,负数表示减去
2.list(列表):类似java的LinkedList,通过链表来完成。像添加元素速度非常快,但取元素速度非常慢。因此list结构适合大数据量要求插入速度极快的场景。
rpush:将多个值放入list尾部(右边)
lpush:将多个值放入list头部(左边)
lrange:能从左到右实现指定违反的列表
rpop:从list尾部抽取出一个元素
lpop:从list头部抽取一个元素
brpop/blpop:带阻塞的pop命令
llen:获取list长度
3.Hash(哈希):Redis中hash是一个键值(key=>value)对集合。hash是一个string类型的field和value的映射表,hash特别适合存储对象。
hset key filed value:给指定的key设置一个字段值,如果值已经存在,则覆盖。返回0表示失败,返回1表示成功。
hget key filed:获取指定key的field字段的值,如果不存在,返回nil。
hexists key field:判断指定的key的field字段是否存在,不存在返回0,存在返回1。
hkeys key:返回key所指定的hash所有的字段名。
hgetall key:返回所有的字段名和字段值
hdel key field:删除多个字段值
hincby key field value:对key指定的hash数据中的field的值进行计算,增加整型value

hincbyfloat key field value:对key指定的hash数据中的field的值进行计算,增加浮点数value

具体详细的 翻阅相关资料 这里不作说明

看代码:

简单的操作一下String类型 和list类型的缓存 来做说明

这是我封装的 方法接口

package com.example.jpa.service.redis;

import java.util.List;

public interface RedisService {

/**
 * 向Redis中存放字符串
 *
 * @param key
 * @param value
 */
void set(String key, Object value);

/**
 * 向Redis中存放字符串[并设置过期时间]
 *
 * @param key
 * @param value
 * @param expire 单位s
 */
void set(String key, Object value, Long expire);

/**
 * 根据key值获取数据【操作字符串】
 *
 * @param key
 * @return
 */
Object get(String key);

/**
 * 删除指定的键值【操作字符串】
 * 
 * @param key
 * @return
 */
void delete(String key);

/**
 * 添加数据到list的顶部【操作List】
 * 
 * @param key List名称
 * @param value 存放的数值
 * @return 存放完毕之后,当前List的长度
 */
Long lpush(String key, String value);

/**
 * 获取List集合中的数据【操作List】
 * 
 * @param key List名称
 * @return list中存放的数据
 */
List range(String key);

/**
 * 向List集合中存放集合
 * 
 * @param key 被操作的List
 * @param list 需要添加的List
 * @return 存放完毕之后,当前List的长度
 */
 Long lPushAll(String key, List list);
 
 /**
 * 移除List中的元素
 * 
 * @param key 被操作的List
 * @param count 要删除的元素个数【为负数表示从尾部,向头部删除;正数则相反】
 * @param value 要删除的元素值
 * @return 移除完毕之后,当前List的长度
 */
 Long remove(String key, long count, Object value);
 
  

}

这是具体实现:

包括新增缓存 删除 之类的

package com.example.jpa.service.redis.impl;

import java.util.List;
import java.util.concurrent.TimeUnit;
import javax.annotation.Resource;

import com.example.jpa.service.redis.RedisService;
import org.springframework.data.redis.core.ListOperations;
import org.springframework.data.redis.core.RedisOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Service;

@Service
public class RedisServiceImpl implements RedisService {

@Resource
private RedisTemplate redisTemplate;

/**
 * 获取操作字符串的ValueOperations
 */
public  ValueOperations getValueOperations(){
    ValueOperations vo = redisTemplate.opsForValue();
    return vo;
}

@Override
public void set(String key, Object value) {
    getValueOperations().set(key, value);
}

@Override
public Object get(String key) {
    return getValueOperations().get(key);
}

@Override
public void delete(String key) {
    RedisOperations operations = getValueOperations().getOperations();
    operations.delete(key);
}

public Long lpush(String key, String value){  
	//获取操作list的对象
	ListOperations opsForList = redisTemplate.opsForList();
	Long length = opsForList.leftPush(key,value);
    return length;  
}

@Override
public List range(String key) {
	//获取操作list的对象
	ListOperations opsForList = redisTemplate.opsForList();
	return opsForList.range(key,0,-1);
}

@Override
public Long lPushAll(String key, List list) {
	//获取操作list的对象
	ListOperations opsForList = redisTemplate.opsForList();
	return opsForList.leftPushAll(key,list);
}

@Override
public Long remove(String key, long count, Object value) {
	//获取操作list的对象
	ListOperations opsForList = redisTemplate.opsForList();
	return opsForList.remove(key,count,value);
}

@Override
public void set(String key, Object value, Long expire) {
	redisTemplate.opsForValue().set(key,value);
	//设置过期时间
	redisTemplate.expire(key,expire,TimeUnit.SECONDS);
} 
 
  

}

首先是操作string类型的缓存:

新增一个自定义key的缓存:

这是controller 使用了set方法

这样keys1的缓存就保存在了 redis当中

/**
* 根据key 添加缓存
* @return
*/
@RequestMapping("/set")
@ResponseBody
public String setredis(){
User user=new User();
user.setId(100000001);
user.setName(“哈哈哈”);
user.setPassword(“123456”);
redisService.set(“keys1”,user);
return “set redis success”;
}

我们可以通过命令来查看他:

添加成功 我们也可以通过代码的方式 获取到他:

/**
 * 根据key 获取缓存
 * @return
 */
@RequestMapping("/get")
@ResponseBody
public String getredis(String key){
   Object obj= redisService.get(key);
   String red= JSON.toJSONString(obj);
    return red;
}

运行效果:

删除缓存:根据key来删除缓存 删掉就没有了 效果就不演示了。

/**
* 根据key 删除缓存
* @return
*/
@RequestMapping("/del")
@ResponseBody
public String delredis(String key){
redisService.delete(key);
return “delete redis success”;
}

这样做 当我们有些数据 不需要保存到数据库 但我们又需要使用它的时候

就可以用这种方法来操作数据

下面是list的方法:

/**
*保存list类型的缓存
* @return
*/
@RequestMapping("/lpush")
@ResponseBody
public Long lpushredis(){
Long size=redisService.lpush(“abc”,“789”);
return size;
}

/**
 * 根据key 查询list类型的缓存
 * @return
 */
@RequestMapping("/range")
@ResponseBody
public List rangeredis(){
    List data= redisService.range("abc");
    return data;
}
 
  

好了 有不懂的 联系 qq:185624592

源码地址:https://gitee.com/GuoZG0328/jpa

作者:SuperGuoZG
来源:CSDN
原文:https://blog.csdn.net/gzgmyj/article/details/81129140
版权声明:本文为博主原创文章,转载请附上博文链接!

你可能感兴趣的:(分布式高并发,Redis)