java使用redis

Java操作Redis是通过RedisTemplate实现的,RedisTemplateSpring Framework框架中用于操作Redis数据库的模板类,封装了Redis的数据访问层,简化了Redis数据操作的过程;
RedisTemplate提供了很多的API,可以执行Redis的各种命令,包括字符串、列表、哈希散列、集合、有序集合的操作;

Java操作Redis流程

  • 第1步:添加依赖,刷新Maven
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
  • 第2步:配置文件中配置数据库连接信息
spring.redis.host=localhost
spring.redis.port=6379
#如果Redis没有密码此项可以不设置
#spring.redis.password=123456
spring.redis.database=0
  • 第3步:创建Redis配置类
config.RedisConfig.java
//填写包名

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;

import java.io.Serializable;

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String, Serializable> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String,Serializable> redisTemplate = new RedisTemplate<>();
        // 设置连接工厂
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        //设置字符串序列化器
        redisTemplate.setKeySerializer(RedisSerializer.string());
        redisTemplate.setValueSerializer(RedisSerializer.json());
        //设置hash的序列化器
        redisTemplate.setHashKeySerializer(RedisSerializer.json());
        redisTemplate.setHashValueSerializer(RedisSerializer.json());
        
        return redisTemplate;
    }
}
  • 第4步:自动装配直接使用即可
//类中自动装配
@Autowired
private RedisTemplate<String, Serializable> redisTemplate;

//方法中直接使用
redisTemplate.opsForValue().set(key, value);

示例

工具类utils.CacheUtils.java

package xxx.base.utils;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

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

/**
 * Redis的缓存工具类
 */

@Component
public class CacheUtil {
    @Autowired
    private RedisTemplate<String, Serializable> redisTemplate;

    public void set(String key, Serializable value){
        /*
        * 1.opsForValue():操作字符串类型;
        *2.opsForList():操作列表类型;
        *3.opsForHash():操作哈希类型;
        *4.opsForSet():操作集合类型;
        *5.opsForZSet():操作有序集合;
        */
        redisTemplate.opsForValue().set(key, value);
    }

    public Serializable get(String key){
        return redisTemplate.opsForValue().get(key);
    }

    public void delete(String key){
        redisTemplate.delete(key);
    }

    public void setExpire(String key, Serializable value, long timeout){
        redisTemplate.opsForValue().set(key, value, timeout, TimeUnit.SECONDS);
    }

    public void lPush(String key, String... values){
        redisTemplate.opsForList().leftPushAll(key, values);
    }

    public String lPop(String key){
        return redisTemplate.opsForList().leftPop(key).toString();
    }
}

操作缓存

//自动装配缓存工具类[自己创建的工具类,调用方法更方便]
@Autowired
private CacheUtil cacheUtil;

@GetMapping("selectIndex")
public JsonResult selectIndex(){

    //利用缓存工具类中的工具方法;
    Serializable weiboIndex = cacheUtil.get("weibo_index");

    if (weiboIndex == null){
        // mysql中查询
        List<WeiboIndexVO> weiboIndexVOS = weiboMapper.selectIndex();
        System.out.println("首页数据来自MySQL数据库");
        // 缓存到redis中
        //ops.set("weibo_index", (Serializable) weiboIndexVOS, 30, TimeUnit.SECONDS);
        // 利用缓存工具类中的方法将首页数据缓存到Redis中
        cacheUtil.setExpire("weibo_index", (Serializable) weiboIndexVOS, 30);
        // 返回
        return JsonResult.ok(weiboIndexVOS);
    }

    System.out.println("首页数据来自Redis数据库");
    return JsonResult.ok(weiboIndex);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容