spring boot + redis

1. 引入jar文件。java

<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-redis</artifactId>
		</dependency>
		<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
		<dependency>
		    <groupId>redis.clients</groupId>
		    <artifactId>jedis</artifactId>
		</dependency>

jedis是必需要的驱动文件,不然运行程序时会出现错误:web

org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.data.redis.connection.RedisConnectionFactory' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

2. 配置文件redis

# application.properties
spring.redis.database=0
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=
spring.redis.jedis.pool.max-active=8
spring.redis.jedis.pool.max-wait=-1
spring.redis.jedis.pool.max-idle=8
spring.redis.jedis.pool.min-idle=0
spring.redis.timeout=5000

3. 还须要本身写相关的配置spring

@Configuration
public class RedisConfig {
    /**
     * 注入 RedisConnectionFactory
     */
    @Autowired
    RedisConnectionFactory redisConnectionFactory;

    /**
     * 实例化 RedisTemplate 对象
     *
     * @return
     */
    @Bean
    public RedisTemplate<String, Object> functionDomainRedisTemplate() {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        initDomainRedisTemplate(redisTemplate, redisConnectionFactory);
        return redisTemplate;
    }

    /**
     * 设置数据存入 redis 的序列化方式
     *
     * @param redisTemplate
     * @param factory
     */
    private void initDomainRedisTemplate(RedisTemplate<String, Object> redisTemplate, RedisConnectionFactory factory) {
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashValueSerializer(new JdkSerializationRedisSerializer());
        redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
        redisTemplate.setConnectionFactory(factory);
    }

    /**
     * 实例化 HashOperations 对象,能够使用 Hash 类型操做
     *
     * @param redisTemplate
     * @return
     */
    @Bean
    public HashOperations<String, String, Object> hashOperations(RedisTemplate<String, Object> redisTemplate) {
        return redisTemplate.opsForHash();
    }

    /**
     * 实例化 ValueOperations 对象,能够使用 String 操做
     *
     * @param redisTemplate
     * @return
     */
    @Bean
    public ValueOperations<String, Object> valueOperations(RedisTemplate<String, Object> redisTemplate) {
        return redisTemplate.opsForValue();
    }

    /**
     * 实例化 ListOperations 对象,能够使用 List 操做
     *
     * @param redisTemplate
     * @return
     */
    @Bean
    public ListOperations<String, Object> listOperations(RedisTemplate<String, Object> redisTemplate) {
        return redisTemplate.opsForList();
    }

    /**
     * 实例化 SetOperations 对象,能够使用 Set 操做
     *
     * @param redisTemplate
     * @return
     */
    @Bean
    public SetOperations<String, Object> setOperations(RedisTemplate<String, Object> redisTemplate) {
        return redisTemplate.opsForSet();
    }

    /**
     * 实例化 ZSetOperations 对象,能够使用 ZSet 操做
     *
     * @param redisTemplate
     * @return
     */
    @Bean
    public ZSetOperations<String, Object> zSetOperations(RedisTemplate<String, Object> redisTemplate) {
        return redisTemplate.opsForZSet();
    }
}

4. 使用:缓存

// hash的使用:
@Resource
private RedisTemplate<String, Object> objRedisTemplate;

void test() {

    // ......

    // 这里的PublicUser 为本身定义的一个实体类文件,也就是咱们要存储的user信息
    HashOperations<String, String, PublicUser> hashOperations = objRedisTemplate.opsForHash();
    // user就是上面所写的PublicUser
    hashOperations.put("public_user", "user1", user);

    // 这里是从redis取数据。
    PublicUser user2 = hashOperations.get("public_user", "user1"); 

    // ......
}
// StringRedisTemplate

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    /**
     * 操做字符串
     */
    private void operateString() {
        stringRedisTemplate.opsForValue().set("author", "luoliang");
        String value = stringRedisTemplate.opsForValue().get("author");
        log.info("stringRedisTemplate输出值:{}", value);
    }

    /**
     * Redis List操做,Redis列表是简单的字符串列表,按照插入顺序排序。能够添加一个元素到列表的头部(左边)或者尾部(右边)
     */
    private void operateList() {
        String key = "website";
        ListOperations<String, String> listOperations = stringRedisTemplate.opsForList();
        //从左压入栈
        listOperations.leftPush(key, "Github");
        listOperations.leftPush(key, "CSDN");
        //从右压入栈
        listOperations.rightPush(key, "SegmentFault");
        log.info("list size:{}", listOperations.size(key));
        List<String> list = listOperations.range(key, 0, 2);
        list.forEach(log::info);
    }

若是你只须要简单的存储的化,只须要一、2的操做,3的配置文件不须要写。在使用时以下便可:app

//注入redisTemplate
    @Autowired
    private StringRedisTemplate redisTemplate;

    @Test
    public void setRedis() {
     //缓存中最经常使用的方法
        redisTemplate.opsForValue().set("first","siwei");
     //设置缓存过时时间为30   单位:秒
     //关于TimeUnit下面有部分源码截图
        redisTemplate.opsForValue().set("second","siweiWu",30, TimeUnit.SECONDS);
        System.out.println("存入缓存成功");
    }
    @Test
    public void getRedis(){
        String first = redisTemplate.opsForValue().get("first");
        String second = redisTemplate.opsForValue().get("second");

        System.out.println("取出缓存中first的数据是:"+first);
        System.out.println("取出缓存中second的数据是:"+second);

    }
    @Test
    public void delRedis() {
        //根据key删除缓存
        Boolean first1 = redisTemplate.delete("first");

        System.out.println("是否删除成功:"+first1);
    }

==================================================================================spring-boot

下面时有关redis的扩展用法:ui

stringRedisTemplate.opsForValue().set("test", "100",60*10,TimeUnit.SECONDS);//向redis里存入数据和设置缓存时间  

stringRedisTemplate.boundValueOps("test").increment(-1);//val作-1操做  

stringRedisTemplate.opsForValue().get("test")//根据key获取缓存中的val  

stringRedisTemplate.boundValueOps("test").increment(1);//val +1  

stringRedisTemplate.getExpire("test")//根据key获取过时时间  

stringRedisTemplate.getExpire("test",TimeUnit.SECONDS)//根据key获取过时时间并换算成指定单位  

stringRedisTemplate.delete("test");//根据key删除缓存  

stringRedisTemplate.hasKey("546545");//检查key是否存在,返回boolean值  

stringRedisTemplate.opsForSet().add("123", "1","2","3");//向指定key中存放set集合  

stringRedisTemplate.expire("123",1000 , TimeUnit.MILLISECONDS);//设置过时时间  

stringRedisTemplate.opsForSet().isMember("123", "1")//根据key查看集合中是否存在指定数据  

stringRedisTemplate.opsForSet().members("123");//根据key获取set集合  

// 验证有效时间
Long expire = redisTemplate.boundHashOps("123").getExpire();
System.out.println("redis有效时间:"+expire+"S");
相关文章
相关标签/搜索