• 【Redis】Java连接redis进行数据访问及项目的实例应用场景


    目录

    一、连接

    二、数据访问

    1. 字符串(String)

    2. 哈希(Hash)

    3. 列表(List)

    4. 集合(Set)

    三、项目应用

    1. 作用

    2. 实例


    一、连接

    打开开发工具( IDEA ) ,在需要连接Redis的项目中,找到 pom.xml 配置文件导入依赖

     在pom.xml 配置文件中导入以下依赖 : 


        redis.clients
        jedis
        2.9.0

    打开本地的Redis【windows连接】,如果是连接虚拟机的Redis RedisDesktopManager数据库只需要打开虚拟机并且连接,开发工具即可连接,如果不知道的可以看我博客 : 

    【Redis】的简介和安装配置(Linux和windows)及操作命令icon-default.png?t=N7T8https://blog.csdn.net/SAME_LOVE/article/details/134187143?spm=1001.2014.3001.5502

    在本地进行连接后,在IDEA 开发工具中,编程以下代码可以进行连RedisDesktopManager数据库。

    1. //host : IP port : 端口号
    2. Jedis jedis = new Jedis("localhost", 6379);
    3. //登入密码
    4. jedis.auth("123456");
    5. //查看是否连接成功
    6. System.out.println(jedis.ping());
    7. //进入为1的数据库
    8. jedis.select(1);

    输入如图,表示连接成功 :

    二、数据访问

    1. 字符串(String)

    以下有增删改查的实例及语法

    代码实例 : 

    1. package com.zking.ssm.redis;
    2. import redis.clients.jedis.Jedis;
    3. /**
    4. * @author CloudJun
    5. * @create  2023-11-03 16:27
    6. */
    7. public class Demo2 {
    8. public static void main(String[] args) {
    9. //host : IP port : 端口号
    10. Jedis jedis = new Jedis("localhost", 6379);
    11. //登入密码
    12. jedis.auth("123456");
    13. //查看是否连接成功
    14. System.out.println(jedis.ping());
    15. //进入为1的数据库
    16. jedis.select(1);
    17. //增加
    18. jedis.set("name","ikun");
    19. jedis.set("hobby","披坚执锐");
    20. //修改数据
    21. jedis.set("name","艾德犸");
    22. //查看数据
    23. System.out.println(jedis.get("name"));
    24. System.out.println(jedis.get("hobby"));
    25. //删除
    26. jedis.del("hobby");
    27. //增加一个key名为 mm 值为 : 情况不对,披坚执锐 30秒后自动删除
    28. jedis.setex("mm",30,"情况不对,披坚执锐");
    29. }
    30. }

    输入如图 : 

    数据库储存 : 

    2. 哈希(Hash)

    以下有增删改查的实例及语法

    代码实例 : 

    1. package com.zking.ssm.redis;
    2. import redis.clients.jedis.Jedis;
    3. /**
    4. * @author CloudJun
    5. * @create  2023-11-03 16:27
    6. */
    7. public class Demo2 {
    8. public static void main(String[] args) {
    9. //host : IP port : 端口号
    10. Jedis jedis = new Jedis("localhost", 6379);
    11. //登入密码
    12. jedis.auth("123456");
    13. //查看是否连接成功
    14. System.out.println(jedis.ping());
    15. //进入为1的数据库
    16. jedis.select(2);
    17. //以哈希(Hash)的增加储存值
    18. jedis.hset("user","name","渣渣灰");
    19. jedis.hset("user","sex","男");
    20. jedis.hset("user","age","21");
    21. //获取指定的字段值 这里获取的是user为key名的sex字段属性值
    22. System.out.println(jedis.hget("user", "sex"));
    23. //查询指定key中的字段属性是否存在 这里查询user的sex字段属性是否存在
    24. Boolean sex = jedis.hexists("user","sex");
    25. System.out.println(sex);
    26. //获取指定key中的长度 获取user的长度,就是有多少个字段属性
    27. Long user_len = jedis.hlen("user");
    28. System.out.println(user_len);
    29. //删除指定的字段值 删除key名为user的sex属性字段及sex的值
    30. jedis.hdel("user","sex");
    31. }
    32. }

    输入如图 : 

    数据库储存 : 

     如果增加时,想同时将多个值增加到一个key中,我们创建一个工具类

      RedisUtils  (工具类

    1. package com.zking.ssm.redis;
    2. import redis.clients.jedis.Jedis;
    3. import java.util.Map;
    4. import java.util.Set;
    5. /**
    6. * @author CloudJun
    7. * @create  2023-11-03 18:28
    8. */
    9. public class RedisUtils {
    10. public static void setHashMap(Jedis jedis, String key, Map map){
    11. if ( map !=null && map.size() > 0 ) {
    12. Set keys = map.keySet();
    13. for (String k : keys){
    14. jedis.hset(key,k,map.get(k));
    15. }
    16. }
    17. }
    18. }

    在将使用实例中的代码修改为以下

    1. package com.zking.ssm.redis;
    2. import redis.clients.jedis.Jedis;
    3. import java.util.HashMap;
    4. import java.util.Map;
    5. import java.util.TreeMap;
    6. /**
    7. * @author CloudJun
    8. * @create  2023-11-03 16:27
    9. */
    10. public class Demo2 {
    11. public static void main(String[] args) {
    12. //host : IP port : 端口号
    13. Jedis jedis = new Jedis("localhost", 6379);
    14. //登入密码
    15. jedis.auth("123456");
    16. //查看是否连接成功
    17. System.out.println(jedis.ping());
    18. //进入为1的数据库
    19. jedis.select(2);
    20. Map map = new HashMap();
    21. map.put("name","渣渣灰");
    22. map.put("sex","男");
    23. map.put("age","21");
    24. //以哈希(Hash)的增加储存值
    25. // jedis.hset("user","name","渣渣灰");
    26. // jedis.hset("user","sex","男");
    27. // jedis.hset("user","age","21");
    28. RedisUtils.setHashMap(jedis,"user",map);
    29. //获取指定的字段值 这里获取的是user为key名的sex字段属性值
    30. System.out.println(jedis.hget("user", "sex"));
    31. //查询指定key中的字段属性是否存在 这里查询user的sex字段属性是否存在
    32. Boolean sex = jedis.hexists("user","sex");
    33. System.out.println(sex);
    34. //获取指定key中的长度 获取user的长度,就是有多少个字段属性
    35. Long user_len = jedis.hlen("user");
    36. System.out.println(user_len);
    37. //删除指定的字段值 删除key名为user的sex属性字段及sex的值
    38. jedis.hdel("user","sex");
    39. System.out.println(jedis.hlen("user"));
    40. }
    41. }

    ( 储存删除的结果都是相同的 )

    3. 列表(List)

    以下有关于列表的语法案例

    代码实例 : 

    1. package com.zking.ssm.redis;
    2. import redis.clients.jedis.Jedis;
    3. /**
    4. * @author CloudJun
    5. * @create  2023-11-03 16:27
    6. */
    7. public class Demo3 {
    8. public static void main(String[] args) {
    9. //host : IP port : 端口号
    10. Jedis jedis = new Jedis("localhost", 6379);
    11. //登入密码
    12. jedis.auth("123456");
    13. //查看是否连接成功
    14. System.out.println(jedis.ping());
    15. //进入为1的数据库
    16. jedis.select(2);
    17. //将一个或多个值插入到列表头部
    18. jedis.lpush("hobby", "洗脚", "spa", "按摩");
    19. //获取列表的长度 llen方法 获取hobby的长度 3
    20. System.out.println(jedis.llen("hobby"));
    21. //根据索引获取列表中的元素 获取hobby中下标为0的属性值
    22. System.out.println(jedis.lindex("hobby", 0));
    23. //查看指定范围内的元素 获取hobby中下标从0到1的属性值
    24. System.out.println(jedis.lrange("hobby", 0, 1));
    25. }
    26. }

    输出如图 : 

    数据库储存如图 : 

    4. 集合(Set)

    以下有关于集合的语法案例

    代码实例 : 

    1. package com.zking.ssm.redis;
    2. import redis.clients.jedis.Jedis;
    3. /**
    4. * @author CloudJun
    5. * @create  2023-11-03 16:27
    6. */
    7. public class Demo4 {
    8. public static void main(String[] args) {
    9. //host : IP port : 端口号
    10. Jedis jedis = new Jedis("localhost", 6379);
    11. //登入密码
    12. jedis.auth("123456");
    13. //查看是否连接成功
    14. System.out.println(jedis.ping());
    15. //进入为1的数据库
    16. jedis.select(2);
    17. //向集合添加一个或多个元素 增加一个名称为game的集合,有"gogo","振刀","农药","飞机"这四个值
    18. jedis.sadd("game","gogo","振刀","农药","飞机");
    19. //获取集合中的元素数量 获取game集合中一共有多少个值
    20. System.out.println(jedis.scard("game"));
    21. //查询集合是否存在 查询名称为game的集合是否存在
    22. System.out.println(jedis.exists("game"));
    23. }
    24. }

    输出如图 : 

    数据库储存如图 : 

    三、项目应用

    1. 作用

    在项目中,Redis可以用于以下几个方面的应用:

    1. 缓存:Redis可以作为缓存服务器,将常用的数据存储在内存中,以加快数据访问的速度。通过将数据存储在Redis中,可以减轻数据库的负载,提高系统的响应速度。

    2. 会话管理:Redis可以用于存储用户的会话信息,例如用户登录状态、购物车信息等。通过将会话数据存储在Redis中,可以实现分布式会话管理,提高系统的可伸缩性和可靠性。

    3. 消息队列:Redis提供了发布/订阅功能,可以用于实现简单的消息队列。可以将需要处理的任务作为消息发布到Redis中,然后由消费者订阅并处理这些消息,实现任务的异步处理。

    4. 数据库:Redis支持持久化存储,可以将数据持久化到磁盘中,以防止数据丢失。可以将Redis作为主数据库或辅助数据库,存储一些关键的业务数据。

    5. 计数器和排行榜:Redis提供了原子操作,可以用于实现计数器和排行榜功能。可以通过Redis的原子操作实现对计数器的增加、减少和查询,以及对排行榜的更新和查询。

    6. 分布式锁:Redis提供了分布式锁的功能,可以用于实现多个进程或线程之间的互斥访问。可以通过Redis的原子操作实现对锁的获取和释放,以确保在同一时间只有一个进程或线程可以访问某个资源。

    总的来说,Redis在项目中的应用非常广泛,可以用于缓存、会话管理、消息队列、数据库、计数器和排行榜、分布式锁等多个方面,可以提高系统的性能、可伸缩性和可靠性。

    2. 实例

    在获取完数据之后,是一个List集合,里面是一个对象,对象中有一个属性为状态,类型为int,如何使用自定义注解将这个状态以文本的形式显示在页面中

    首先,需要定义一个自定义注解,用于标注状态的文本表示。

    hobby_value  

    1. package com.CloudJun.ssm.redis;
    2. import java.lang.annotation.ElementType;
    3. import java.lang.annotation.Retention;
    4. import java.lang.annotation.RetentionPolicy;
    5. import java.lang.annotation.Target;
    6. /**
    7. * @author CloudJun
    8. * @create  2023-11-05 16:23
    9. */
    10. @Retention(RetentionPolicy.RUNTIME)
    11. @Target(ElementType.FIELD)
    12. public @interface hobby_value {
    13. String value() default "";
    14. }

    然后,创建一个对象来方便模拟数据储存,进行获取。

    User

    1. package com.CloudJun.ssm.redis;
    2. import lombok.Data;
    3. /**
    4. * @author CloudJun
    5. * @create  2023-11-05 16:21
    6. */
    7. @Data
    8. public class User {
    9. private Integer id;
    10. private String name;
    11. private Integer hobby;
    12. public User(Integer id, String name, Integer hobby) {
    13. this.id = id;
    14. this.name = name;
    15. this.hobby = hobby;
    16. }
    17. }

    接下来,可以编写一个工具类,用于获取状态的文本表示。该工具类通过反射获取对象的状态属性上的注解值,并返回该值作为文本表示。

    StatusTextUtil 

    1. package com.CloudJun.ssm.redis;
    2. import java.lang.reflect.Field;
    3. /**
    4. * @author CloudJun
    5. * @create  2023-11-05 17:02
    6. */
    7. public class StatusTextUtil {
    8. public static String getStatusText(Object obj) {
    9. Class clazz = obj.getClass();
    10. Field[] fields = clazz.getDeclaredFields();
    11. for (Field field : fields) {
    12. if (field.isAnnotationPresent(hobby_value.class)) {
    13. try {
    14. field.setAccessible(true);
    15. int status = field.getInt(obj);
    16. return field.getAnnotation(hobby_value.class).value();
    17. } catch (IllegalAccessException e) {
    18. e.printStackTrace();
    19. }
    20. }
    21. }
    22. return null;
    23. }
    24. }

    最后,在页面中使用该工具类获取状态的文本表示,并显示在页面上。

    为了方便创建一个测试类,进行数据的模拟获取并且转换成文本来回显到页面上

    1. package com.CloudJun.ssm.redis;
    2. import redis.clients.jedis.Jedis;
    3. import java.util.ArrayList;
    4. import java.util.HashMap;
    5. import java.util.List;
    6. import java.util.Map;
    7. /**
    8. * @author CloudJun
    9. * @create  2023-11-03 16:27
    10. */
    11. public class Demo5 {
    12. public static void main(String[] args) throws NoSuchFieldException {
    13. //host : IP port : 端口号
    14. Jedis jedis = new Jedis("localhost", 6379);
    15. //登入密码
    16. jedis.auth("123456");
    17. //查看是否连接成功
    18. System.out.println(jedis.ping());
    19. //进入为3的数据库
    20. jedis.select(3);
    21. //增加
    22. jedis.set("1","打篮球");
    23. jedis.set("2","踢足球");
    24. jedis.set("3","做运动");
    25. jedis.set("4","洗脚spa");
    26. jedis.set("5","打豆豆");
    27. jedis.set("6","打游戏");
    28. //数据模拟,我们查询返回的有过对象集合,想要显示在页面上是不完美的,比如: 状态,爱好
    29. List lists = new ArrayList();
    30. //这里是演示用户的爱好的数字进行转化为爱好的状态文字
    31. User u1 = new User(1,"坤坤酱",1);
    32. User u2 = new User(2,"丘比特",2);
    33. User u3 = new User(3,"独孤贱",3);
    34. User u4 = new User(4,"卡卡西",4);
    35. User u5 = new User(5,"沸羊羊",5);
    36. User u6 = new User(6,"钢铁侠",6);
    37. lists.add(u1);
    38. lists.add(u2);
    39. lists.add(u3);
    40. lists.add(u4);
    41. lists.add(u5);
    42. lists.add(u6);
    43. for (User u: lists) {
    44. String hobby = jedis.get(u.getHobby()+"");
    45. // hobby_value h = u.getClass().getDeclaredField("hobby").getAnnotation(hobby_value.class);
    46. // System.out.println(hobby);
    47. String text = StatusTextUtil.getStatusText(u);
    48. String hobby_val = text=hobby;
    49. System.out.println("姓名:"+u.getName()+",爱好:"+hobby_val);
    50. }
    51. }
    52. }

    执行结果 :

    这样,你就可以根据状态int数据将其转换为对应的文本表示,并展现在页面中了。

  • 相关阅读:
    利用PhpOffice PhpSpreadsheet导出excel ,laravel admin grid <a>标签禁止跳转
    java计算机毕业设计高校教师科研文献管理系统MyBatis+系统+LW文档+源码+调试部署
    解决k8s删除名称空间无法强制删除的问题
    (附源码)php丽江旅游服务网站系统 毕业设计 010149
    CentOS升级GCC
    2311rust,到60版本更新
    『现学现忘』Git基础 — 24、Git中查看历史版本记录
    OpenGL原理与实践——核心模式(三):Texture-纹理系统理论与应用
    lombok总结
    WuThreat身份安全云-TVD每日漏洞情报-2022-12-1
  • 原文地址:https://blog.csdn.net/SAME_LOVE/article/details/134207260