• Java操作redis常见类型数据存储


    一、Java连接Redis

            redis与mysq都是数据库,java操作redis其实跟操作mysql的过程是差不多的,首先都是导入依赖、建立连接,只是方式不同,redis是非关系数据库而mysql是关系数据库

    什么是关系数据库与非关系数据库?

            关系数据库 是一种基于关系模型的数据库系统,其中数据以表格形式组织,并使用 SQL(Structured Query Language)进行查询和管理。在关系数据库中,数据由多个表格组成,每个表格包含多个行和列,每行代表一个记录,每列代表一个属性。关系数据库中的表格之间可以建立关系,通过这些关系可以实现数据的联合查询和更新。关系数据库最常见的例子是MySQL、Oracle和SQL Server等。

    非关系数据库(NoSQL)是相对于传统的关系数据库而言的,它采用了非关系数据模型来存储和处理数据。非关系数据库通常不使用表格,而是使用其他形式的数据结构,例如键值对、文档、图形等,以便更好地处理大量非结构化数据。NoSQL数据库通常具有较高的可扩展性、灵活性和性能,并且能够处理复杂的数据处理任务。非关系数据库最常见的例子是MongoDB、Cassandra和Redis等。

    1.1 导入pom依赖

    在maven项目中导入redis依赖

    1. <dependency>
    2. <groupId>redis.clientsgroupId>
    3. <artifactId>jedisartifactId>
    4. <version>2.9.0version>
    5. dependency>

    1.2 建立连接

    首先的启动redis,Linux版与windos版启动redis方式详情文章在上一篇

    本次为了方便就使用了本机进行测试使用redis

    1. package com.liwen.test;
    2. import redis.clients.jedis.Jedis;
    3. /**
    4. * @ 用户 liwen
    5. * @当前日期 2023/11/5
    6. * @当前项目名称 SpringMvc-crud
    7. */
    8. public class demo1 {
    9. public static void main(String[] args) {
    10. // 建立redis数据库连接
    11. Jedis jedis = new Jedis("127.0.0.1", 6379);
    12. jedis.auth("123456");
    13. System.out.println(jedis.ping());
    14. }
    15. }

    二、Java使用Redis

            Redis支持五种基本的数据类型:字符串(string),哈希(hash),列表(list),集合(set)和有序集合(sorted set,也被称为zset)。这些数据类型在数据库中都以key-value的形式保存,所有的key都是字符串类型的。

        具体来说,Redis的字符串是二进制安全的,这意味着他们可以包含任何数据,比如图片或者JSON。哈希是一个键值对的集合,适合用于存储对象。列表是简单的字符串列表,按插入顺序排序,适用于队列和栈等场景。集合是一个无序的字符串集合,用于存储不重复的数据。有序集合和集合类似,但每个元素都关联了一个分数,根据这个分数进行排序,适用于排行榜等场景。

    此外,从Redis 5.0.5版本开始,还增加了两种数据类型:位图和地理位置。位图是一种压缩的字符串表示形式,可以节省空间;地理位置则用于存储地理坐标信息。

    2.1 字符串 String

    1. package com.liwen.test;
    2. import redis.clients.jedis.Jedis;
    3. /**
    4. * @ 用户 liwen
    5. * @当前日期 2023/11/5
    6. * @当前项目名称 SpringMvc-crud
    7. */
    8. public class demo1 {
    9. public static void main(String[] args) {
    10. // 建立redis数据库连接
    11. Jedis jedis = new Jedis("127.0.0.1", 6379);
    12. jedis.auth("123456");
    13. System.out.println(jedis.ping());
    14. //string:set get del sexex ttl
    15. jedis.select(3);//指定数据库
    16. //添加数据
    17. jedis.set("string_name", "Java文昊");
    18. //get key 获取
    19. System.out.println(jedis.get("string_name"));
    20. //type key 查看类型
    21. System.out.println(jedis.type("string_name"));
    22. //keys * 或 keys key 查看所有或者指定的key
    23. System.out.println(jedis.keys("*"));
    24. //SETEX KEY_NAME TIMEOUT VALUE 给键值对设置过期时间
    25. jedis.setex("string_test", 100, "ready");
    26. //ttl key 获取键值对剩余的存活时间
    27. System.out.println(jedis.ttl("string_test"));
    28. }
    29. }

     

    2.2 哈希 Hash

    1. package com.liwen.test;
    2. import redis.clients.jedis.Jedis;
    3. import java.util.Map;
    4. /**
    5. * @ 用户 liwen
    6. * @当前日期 2023/11/6
    7. * @当前项目名称 SpringMvc-crud
    8. */
    9. public class demo {
    10. public static void main(String[] args) {
    11. Jedis jedis = new Jedis("127.0.0.1", 6379);
    12. jedis.auth("123456");
    13. System.out.println(jedis.ping());
    14. //Hash
    15. jedis.select(4);//指定数据库
    16. //hset key field1 value1 [field2 value2] 同时将多个field-value设置到哈希表key中
    17. jedis.hset("hash_user", "name", "李文昊");
    18. jedis.hset("hash_user", "sex", "男");
    19. jedis.hset("hash_user", "age", "18");
    20. //hget key field 获取指定的字段值
    21. System.out.println(jedis.hget("hash_user", "sex"));
    22. //hdel key field 删除指定的字段值
    23. jedis.hdel("hash_user", "sex");
    24. //hgetall key 查询指定key的所有字段
    25. Map hash_user_map = jedis.hgetAll("hash_user");
    26. System.out.println(hash_user_map);
    27. //hexists key field 查询指定key中的字段是否存在
    28. Boolean hash_user = jedis.hexists("hash_user", "sex");
    29. System.out.println(hash_user);
    30. //hlen key 获取指定key中的长度
    31. Long hash_user_len = jedis.hlen("hash_user");
    32. System.out.println(hash_user_len);
    33. }
    34. }

    优化一下 

    1. public void setHashMap(Jedis jedis, String key, Map map) {
    2. if (map != null && map.size() > 0) {
    3. Set keys = map.keySet();
    4. for (String k : keys) {
    5. jedis.hset(key, k, map.get(k));
    6. }
    7. }
    8. }

    调用方法

    1. Map map = new HashMap<>();
    2. map.put("name", "李文昊");
    3. map.put("sex", "男");
    4. map.put("age", "18");
    5. setHashMap(jedis, "user", map);

    2.3 列表 List

    1. package com.liwen.test;
    2. import redis.clients.jedis.Jedis;
    3. /**
    4. * @ 用户 liwen
    5. * @当前日期 2023/11/6
    6. * @当前项目名称 SpringMvc-crud
    7. */
    8. public class demo3 {
    9. public static void main(String[] args) {
    10. Jedis jedis = new Jedis("127.0.0.1", 6379);
    11. jedis.auth("123456");
    12. System.out.println(jedis.ping());
    13. jedis.select(4);//指定数据库
    14. //lpush key value1 value2 value3 将一个或多个值插入到列表头部
    15. jedis.lpush("List_hobby", "sing", "jump", "rap", "basketball");
    16. //llen key 获取列表的长度
    17. System.out.println(jedis.llen("List_hobby"));
    18. //lindex key index 根据索引获取列表中的元素
    19. System.out.println(jedis.lindex("List_hobby", 2));
    20. //lrange key start sop 查看指定范围内的元素
    21. System.out.println(jedis.lrange("List_hobby", 0, 3));
    22. }
    23. }

  • 相关阅读:
    2023秋招大厂经典面试题及答案整理归纳(341-360)校招必看【Linux篇】
    buildroot中C语言使用libconfig的实例
    【vue】如何打开别人编译后的vue项目
    计算机毕业设计Java家电产品售后(源码+系统+mysql数据库+lw文档)
    monai如何读取.nii/.nii.gz数据
    “可持续计划”,京东与华为双向奔赴背后的“三方共赢”
    翻页电子杂志制作方法,看完有手就行
    湖仓一体电商项目(三):3万字带你从头开始搭建12个大数据项目基础组件
    SQL血缘解析原理
    后端——模块化、npm、package.json 文件、AJAX(笔试面试题)、MVC
  • 原文地址:https://blog.csdn.net/Ying_hao_kun/article/details/134241709