如何在JAVA中操作Redis

一、首先导入依赖

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

二、配置Redis数据源

  redis:
    host: localhost
    port: 6379
    password: root
    database: 0

三、编写配置类,创建RedisTemplate对象

@Configuration
public class RedisConfig {
    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) {
        RedisTemplate redisTemplate = new RedisTemplate();
        //设置连接工厂 包含了redis的连接信息
        redisTemplate.setConnectionFactory(connectionFactory);
        //设置key的序列化器,把key序列化成String 写入到redis
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        //设置value的序列化器,把value序列化成String 写入到redis
        redisTemplate.setValueSerializer(new StringRedisSerializer());
        return redisTemplate;
    }
    @Bean
    public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory connectionFactory){
        //只需要设置连接工厂
        StringRedisTemplate stringRedisTemplate = new StringRedisTemplate(connectionFactory);
        return stringRedisTemplate;
    }
}

四、通过StringRedisTemplate对象操作不同类型的Redis 

@SpringBootTest
class RedisConfigTest {
    @Autowired
    private RedisTemplate redisTemplate;
    @Autowired
    private StringRedisTemplate stringRedisTemplate
    @Test
    public void testString() {
        ValueOperations<String, String> ssvo = stringRedisTemplate.opsForValue();
        ssvo.set("key1", "value1");
        String value1 = ssvo.get("key1");
        //设置断言 期望值 -- 实际值
        Assertions.assertEquals("value1", value1);
        //ex
        ssvo.set("key2", "value2", Duration.ofSeconds(20));
        //nx
        Boolean value3 = ssvo.setIfAbsent("key3", "value3");
        Assertions.assertTrue(value3);
        //set ex nx
        Boolean value4 = ssvo.setIfAbsent("key4", "value4", Duration.ofSeconds(20));
        Assertions.assertTrue(value4);
        // TODO ttl
        Long ttl = stringRedisTemplate.getExpire("key2");
        Assertions.assertTrue(ttl < Duration.ofSeconds(30).getSeconds());

        // incr
        ssvo.set("key5", "10");
        Long key5 = ssvo.increment("key5");
        Assertions.assertEquals(11l, key5);
        // decr
        Long key51 = ssvo.decrement("key5");
        Assertions.assertEquals(10L, key51);
    }
    @Test
    public void testHash() {
        HashOperations<String, String, String> sooo = stringRedisTemplate.opsForHash();
        //set
        sooo.put("user:1", "username", "zhangsan");
        sooo.put("user:1", "age", "18");
        sooo.put("user:1", "gender", "1");
        sooo.put("user:1", "city", "jinan");
        sooo.put("user:1", "classname", "heima62");
        //get
        String age = sooo.get("user:1", "age");
        Assertions.assertEquals("18", age);
        String classname = sooo.get("user:1", "classname");
        Assertions.assertEquals("heima62", classname);
        //del
        Long city = sooo.delete("user:1", "city");
        String city1 = sooo.get("user:1", "city");
        Assertions.assertNull(city1);
        //keys
        Set<String> keys = sooo.keys("user:1");
        Assertions.assertEquals(4, keys.size());
        //values
        List<String> values = sooo.values("user:1");
        Assertions.assertEquals(4, values.size());
        Assertions.assertTrue(values.contains("zhangsan"));
    }

    @Test
    public void testList() {
        ListOperations<String, String> ssol = stringRedisTemplate.opsForList();
        //push
        ssol.leftPush("l1", "1");
        ssol.leftPush("l1", "9");
        ssol.leftPush("l1", "3");
        ssol.leftPush("l1", "5");
        ssol.leftPush("l1", "3");
        //range
        List<String> l1 = ssol.range("l1", 0, 2);
        Assertions.assertEquals("3", l1.get(0));
        Assertions.assertEquals("5", l1.get(1));
        //rpop
        String l11 = ssol.rightPop("l1");
        Assertions.assertEquals("1", l11);
        //llen
        Long l12 = ssol.size("l1");
        Assertions.assertEquals(4l, l12);
        //brpop
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(5000);
                    ssol.leftPush("l2", "100");
                } catch (InterruptedException e) {
                }
            }
        }).start();
        long start = System.currentTimeMillis();
        String l2 = ssol.rightPop("l2", Duration.ofSeconds(10));
        long end = System.currentTimeMillis();
        Assertions.assertNotNull(l2);
        Assertions.assertTrue((end-start)>4000);
    }
    @Test
    public void testSet(){
        SetOperations<String, String> sso = stringRedisTemplate.opsForSet();
        //sadd
        sso.add("s1","1","2","4","8","3","6");
        sso.add("s2","2","3","4","5","10","9");
        //members
        Set<String> s1 = sso.members("s1");
        Assertions.assertEquals(6,s1.size());
        //srem
        sso.remove("s1", "6");
        Assertions.assertEquals(6,s1.size());
        //sinter
        Set<String> intersect = sso.intersect("s1", "s2");
        Assertions.assertEquals(3,intersect.size());
        //sunion
        Set<String> union = sso.union("s1", "s2");
        Assertions.assertEquals(8,union.size());
    }
    @Test
    public void testZSet(){
        ZSetOperations<String, String> sszo = stringRedisTemplate.opsForZSet();
        sszo.add("z1","zs",100);
        sszo.add("z1","ww",110);
        sszo.add("z1","zl",90);
        sszo.add("z1","sd",80);
        //zrange
        Set<String> z1 = sszo.range("z1", 0, -1);
        Assertions.assertEquals(4,z1.size());
        //reverseRange
        Set<String> z2 = sszo.reverseRange("z1", 0, -1);
        Assertions.assertEquals(4,z2.size());
        //zincrby
        sszo.incrementScore("z1", "sd", 100);
        Set<String> z11 = sszo.range("z1", 0, -1);
        System.out.println(z11.toString());

        //zrem
        sszo.remove("z1", "ww");
        Set<String> z111 = sszo.range("z1", 0, -1);
        Assertions.assertEquals(3,z111.size());
    }
    @Test
    public void testCommon(){
        ValueOperations<String, String> ssvo = stringRedisTemplate.opsForValue();
        ssvo.set("w1","v1",Duration.ofSeconds(20));
        //ttl
        Long w1 = stringRedisTemplate.getExpire("w1");
        System.out.println(w1);
        //exists
        Boolean w11 = stringRedisTemplate.hasKey("w1");
        System.out.println(w11);
        //type
        DataType w12 = stringRedisTemplate.type("w1");
        System.out.println(w12.toString());
        //del
        stringRedisTemplate.delete("w1");
        //unlink
        stringRedisTemplate.unlink("w1");
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值