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

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

 

有不懂的 联系 qq:185624592

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

项目架构和文件pom 配置 都在我上一篇:https://blog.csdn.net/gzgmyj/article/details/81127518

 

我这边简单介绍一下:

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<Object> range(String key);
	
	/**
	 * 向List集合中存放集合
	 * 
	 * @param key 被操作的List
	 * @param list 需要添加的List
	 * @return 存放完毕之后,当前List的长度
	 */
	 Long lPushAll(String key, List<Object> 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<String,Object> redisTemplate;

    /**
     * 获取操作字符串的ValueOperations
     */
    public  ValueOperations<String,Object> getValueOperations(){
        ValueOperations<String,Object> 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<String, Object> operations = getValueOperations().getOperations();
        operations.delete(key);
    }
    
    public Long lpush(String key, String value){  
    	//获取操作list的对象
    	ListOperations<String, Object> opsForList = redisTemplate.opsForList();
    	Long length = opsForList.leftPush(key,value);
        return length;  
    }

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

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

	@Override
	public Long remove(String key, long count, Object value) {
		//获取操作list的对象
    	ListOperations<String, Object> 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<Object> rangeredis(){
        List<Object> data= redisService.range("abc");
        return data;
    }

 

 

好了  有不懂的 联系 qq:185624592

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

  • 10
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值