zoukankan      html  css  js  c++  java
  • 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"));
        }
    }
    
    资源分享: 腾讯云华为云
  • 相关阅读:
    hihocoder #1467 : 2-SAT·hihoCoder音乐节 2-SAT
    hihoCoder#1185 : 连通性·三 tarjan求强联通分量 缩点 dfs/拓扑排序求路径和最大值
    hihoCoder1175 拓扑排序·二 拓扑排序
    012 列表的一些常用操作符
    011,列表2
    010 列表1
    009,分支和循环3
    008,分支和循环2
    006 Python的操作符
    005 Python的数值类型
  • 原文地址:https://www.cnblogs.com/GetcharZp/p/15740663.html
Copyright © 2011-2022 走看看