Redis的Docker安装及基本使用

Redis 端口 6379

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

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

导入maven依赖


    redis.clients
    jedis
    4.0.0

编写单元测试

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 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 map1 = jedis.hgetAll("hash");
        for (Map.Entry entry : map1.entrySet()) {
            System.out.println(entry.getKey() + "-->" + entry.getValue());
        }
        // 删除hash中特定的字段
        jedis.hdel("hash", "key1");
    }
}

导入Redis启动器


    org.springframework.boot
    spring-boot-starter-data-redis

配置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 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 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"));
    }
}

Original: https://www.cnblogs.com/GetcharZp/p/15740663.html
Author: GetcharZp
Title: Redis的Docker安装及基本使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/529462/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • linux挂载文件系统

    当使用光驱等硬件设备时,必须将其挂载到系统中,只有这样Linux才能识别。 1、给虚拟机中centos7系统添加一块新的硬盘,添加以后必须重启centos7才能生效 2、在root…

    Linux 2023年5月27日
    089
  • 代码规范浅谈

    代码规范这东西网上很容易百度到一堆,除了天下文章一大抄的问题,另外,多数只给了结果,原因没有充分说明,或者非常的纠结于大写小写,一个函数可以写几行的细节。感觉有点容易让新人误入歧途…

    Linux 2023年6月13日
    089
  • 理想汽车 x JuiceFS:从 Hadoop 到云原生的演进与思考

    理想汽车在 Hadoop 时代的技术架构 首先简单回顾下大数据技术的发展,基于我个人的理解,将大数据的发展分了4个时期: 第一个时期: 2006 年到 2008 年。2008 年左…

    Linux 2023年6月14日
    083
  • 环境变量

    环境变量,简单来说就是描述程序执行环境的一组变量。 1、什么程序执行环境? 环境已经基础词汇呢,我们通常都用环境去解释别的词,想一下,日常生活怎么用环境。你到一个新地方,我问你环境…

    Linux 2023年6月6日
    0107
  • NAT回流(Twice NAT)Hairping 参数详解

    内网用户需要通过域名访问内网的服务器,一般商用环境是无法访问的,需要经过以下配置,原理不说了,直接说配置。 nat (inside,inside) source dynamic i…

    Linux 2023年6月6日
    093
  • 查询数据库表大小

    csharp;gutter:true;SELECTTABLE_NAME,DATA_LENGTH + INDEX_LENGTH,TABLE_ROWS,concat(round((DA…

    Linux 2023年6月7日
    081
  • Unity Profiler的使用

    选中Development Build、Autoconnect Profiler和Script Debugging三个选项,如下图所示。 点击Build And Run按钮,将会编…

    Linux 2023年6月7日
    085
  • 前端奇奇怪怪的CSS样式

    使用inline-block相当于将元素介于块级元素与行内元素之间,将换行符转换成了空格,因此各个元素之间会有空隙 各个元素没有间隙,且元素自身大小不会改变,若一行容不下,则会换行…

    Linux 2023年6月13日
    085
  • DDR4 SDRAM -时序参数小册子

    如前所述,大神的原文链接如下:https://www.systemverilog.io/ddr4-timing-parameters-cheatsheet 参数 功能 ACTIVA…

    Linux 2023年6月7日
    096
  • 微服务架构项目搭建过程中的Mysql安装和相关问题

    搭建微服务架构的过程中需要使用Mysql数据库,Mysql数据库搭建着实不是一个容易的事情,会碰到各种各样的问题,如果没有一个安装数据库的思路真的很难把数据库安装好,并且掉入到安装…

    Linux 2023年6月14日
    0105
  • JavaScript事件处理(三)

    上机三 JavaScript事件处理 目的: 熟练掌握JavaScript事件处理机制 重点理解面向对象编程思想,并构建程序。 要求: 定义一个按钮,动态生成DIV,可以生成多个D…

    Linux 2023年6月13日
    086
  • shell之常用的一些命令2

    前言 自我感觉学习shell要常用man,–help这样挺方便去写的,光靠熟练远远不够的 bash;gutter:false;</p> <h1>!/bin…

    Linux 2023年6月8日
    071
  • [转帖]Redis RDB 分析工具 rdbtools 说明

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Linux 2023年5月28日
    094
  • Shiro结合Redis实现分布式或集群环境下的Session共享

    本篇是Shiro系列第二篇,使用Shiro基于Redis实现分布式或集群环境下的Session共享。在讲Session共享之前先说一下为什么要做Session共享。 什么是Sess…

    Linux 2023年5月28日
    0117
  • django解析POST过来的json时,Unterminated string starting

    结论:我遇到的问题是与号( &), 分号( ; ), 等号( = ) 都会成为字符串分割符。导致后端解析json参数失败 1.bug产生背景 handsontable插件实…

    Linux 2023年6月8日
    095
  • MIT6.828——Lab1 partA(麻省理工操作系统课程实验)

    Lab1 基本部分 在实验给出的文档中,已经详说明了早期PC的内存布局,并且运行了 bootloader。详细地解释了,上电后BIOS所做的工作,因此这部分不再赘述。需要注意的是 …

    Linux 2023年5月27日
    0157
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球