Redis的Docker安装及基本使用

基于Docker安装Redis

Redis 端口 6379

通过以下命令启动一个简单的Redis容器

docker run --name some-redis -d -p 6379:6379 redis:6.2.6

Java Client 测试

Java 中推荐使用Jedis实现对Redis的操作,参考文档 https://github.com/redis/jedis (使用Jedis连接Redis),https://redis.io/commands (Redis命令大全),https://www.cnblogs.com/GetcharZp/p/11455234.html(Redis常用命令)

导入maven依赖

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>4.0.0</version>
</dependency>

编写单元测试

import org.junit.Test;
import redis.clients.jedis.Jedis;
import java.util.HashMap;
import java.util.Map;

public class Redis {
    /**
     * 往string这一结构中设置并获取数据
     */
    @Test
    public void testString() {
        Jedis jedis = new Jedis("localhost", 6379);
        jedis.set("name", "getchar");
        System.out.println(jedis.get("name"));
        // 删除 key
        jedis.del("name");
    }

    /**
     * Redis中的list可以看做双向链表
     * 使用 lpush() rpop() 时为队列
     * 使用 lpush() lpop() 时为栈
     */
    @Test
    public void testList() {
        Jedis jedis = new Jedis("localhost", 6379);
        jedis.lpush("q", "q1");
        jedis.lpush("q", "q2");
        jedis.lpush("q", "q3");
        while (jedis.llen("q") > 0) {
            System.out.println(jedis.rpop("q"));
        }
    }

    /**
     * Redis中使用set管理数据集合
     * sadd() 往集合中新增一个数据(如果集合中已存在该元素则返回0,新增不成功)
     * smembers() 获取数据集合
     * srem() 移除集合中特定的元素
     */
    @Test
    public void testSet() {
        Jedis jedis = new Jedis("localhost", 6379);
        jedis.sadd("set", "key1");
        jedis.sadd("set", "key2");
        jedis.sadd("set", "key3");
        // 已存在key3,该语句返回 0
        jedis.sadd("set", "key3");
        // 通过 smembers() 获取 set 集合
        for (String set : jedis.smembers("set")) {
            System.out.println(set);
        }
        // 移除set中特定的元素
        jedis.srem("set", "key1");
    }

    /**
     * Redis 中使用zset来管理有序集合
     * zadd() 往有序集合中新增一个数据
     * zrange() zrangeByScore() 获取有序集合列表
     * zrem() 移除集合中特定的元素
     */
    @Test
    public void testZSet() {
        Jedis jedis = new Jedis("localhost", 6379);
        jedis.zadd("zset", 10, "key1");
        jedis.zadd("zset", 5, "key2");
        jedis.zadd("zset", 30, "key3");
        // zrange 获取 [start, stop] 中的元素
        for (String zset : jedis.zrange("zset", 0, 2)) {
            System.out.println(zset);
        }
        // zrangeByScore 获取分数在 [min, max] 中的元素
        for (String zset : jedis.zrangeByScore("zset", 5, 30)) {
            System.out.println(zset);
        }
        // 移除有序集合中特定的元素
        jedis.zrem("zset", "key3");
    }

    /**
     * Redis 中使用hash来管理相应的键值数据
     * hset 往hash中设置键值对
     * hexists 判断键值是否存在
     * hget 获取键对应的值
     * hgetAll 获取所有的键值
     * hdel 删除特定字段
     */
    @Test
    public void testHash() {
        Jedis jedis = new Jedis("localhost", 6379);
        HashMap<String, String> map = new HashMap<>();
        map.put("key1", "value1");
        map.put("key2", "value2");
        map.put("key3", "value3");
        // 往hash中设置值
        jedis.hset("hash", map);
        // hexists 判断hash中对应的字段是否存在
        System.out.println(jedis.hexists("hash", "key1"));
        // hget 获取hash中对应字段的值
        System.out.println(jedis.hget("hash", "key1"));
        Map<String, String> map1 = jedis.hgetAll("hash");
        for (Map.Entry<String, String> entry : map1.entrySet()) {
            System.out.println(entry.getKey() + "-->" + entry.getValue());
        }
        // 删除hash中特定的字段
        jedis.hdel("hash", "key1");
    }
}

SpringBoot中使用Redis

导入Redis启动器

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

配置application.properties配置文件

spring.redis.host=localhost # 默认为localhost,如果为本地可以不用配置

编写单元测试,存储简单数据

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.Objects;

@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringbootRedis {
    @Autowired
    private RedisTemplate<String, String> template;

    @Test
    public void testString() {
        template.opsForValue().set("n1", "m1");
        System.out.println(template.opsForValue().get("n1"));
    }

    @Test
    public void testList() {
        template.opsForList().leftPushAll("l1", "v1", "v2", "v3");
        while (Objects.requireNonNull(template.opsForList().size("l1")) > 0) {
            System.out.println(template.opsForList().rightPop("l1"));
        }
    }

    @Test
    public void testSet() {
        template.opsForSet().add("s1", "k1", "k2", "k3");
        for (String s1 : Objects.requireNonNull(template.opsForSet().members("s1"))) {
            System.out.println(s1);
        }
        template.opsForSet().remove("s1", "k1");
        for (String s1 : Objects.requireNonNull(template.opsForSet().members("s1"))) {
            System.out.println(s1);
        }
    }

    @Test
    public void testZSet() {
        template.opsForZSet().add("zs1", "k1", 10);
        template.opsForZSet().add("zs1", "k2", 5);
        template.opsForZSet().add("zs1", "k3", 20);
        for (String zs1 : Objects.requireNonNull(template.opsForZSet().range("zs1", 0, 2))) {
            System.out.println(zs1);
        }
        for (String zs1 : template.opsForZSet().rangeByScore("zs1", 10, 20)) {
            System.out.println(zs1);
        }
    }

    @Test
    public void testHash() {
        template.opsForHash().put("h1", "k1", "v1");
        System.out.println(template.opsForHash().get("h1", "k1"));
    }
}

存储对象(即序列化的数据)

当前springboot的版本为2.5.5,针对该版本操作Redis的时候可以直接使用上面内容的操作,暂不需要对序列化相关内容进行配置,参考代码:

实例类:

public class User implements Serializable {
    private String name;
    private Integer age;
    private String password;

    public User(String name, Integer age, String password) {
        this.name = name;
        this.age = age;
        this.password = password;
    }
}

单元测试,相关包参考上面的 Java Client

@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringbootRedis {
    @Resource
    private RedisTemplate<String, Object> redisTemplate;

    @Test
    public void testSerializer() {
      // redisTemplate.setKeySerializer(RedisSerializer.string());
      User user = new User("name", 18, "password");
      redisTemplate.opsForValue().set("user", user);
      User user1 = (User) redisTemplate.opsForValue().get("user");
      System.out.println(user1.toString());
    }

    @Test
    public void testObjectList() {
      User user = new User("name", 18, "password");
      redisTemplate.opsForList().leftPushAll("u", user);
      System.out.println(redisTemplate.opsForList().rightPop("u"));
    }
}
posted @ 2021-12-28 15:01  GetcharZp  阅读(130)  评论(0编辑  收藏  举报