当前位置: 首页 > news >正文

长沙门户网站建设seo站群系统

长沙门户网站建设,seo站群系统,襄阳市做网站 优帮云,居众装饰集团有限公司目录 前言 一、Jedis介绍 1.Jedis在各方面的功能 2.特点 二、Java连接Redis 1.导入pom依赖 2.建立连接 三、Java操作Redis的常见类型数据存储 1.字符串 2.哈希表 3.列表 4.集合 5.有序集合 四、Redis的实际应用场景实例 1.会议信息实体 2.自定义注解 3.创建切面…

目录

前言

一、Jedis介绍

1.Jedis在各方面的功能

2.特点

二、Java连接Redis

1.导入pom依赖

2.建立连接

三、Java操作Redis的常见类型数据存储

1.字符串

2.哈希表

3.列表

4.集合

5.有序集合

四、Redis的实际应用场景实例

1.会议信息实体

2.自定义注解

3.创建切面类

4.创建控制层(controller层)


前言

Redis作为一个高性能、多数据结构支持、原子性操作以及高可用性和扩展性的内存缓存数据库,在现代化的互联网服务中具有非常重要的地位。在Java应用程序中,使用Redis来操作常见的数据类型是必不可少的一项技能。本文将为大家介绍Java如何操作Redis中的常见数据类型,包括字符串、哈希表、列表、集合和有序集合。

一、Jedis介绍

Jedis是一款Java语言编写的Redis客户端,它提供了比较全面的Redis命令操作,可以方便地使用Java代码来访问和操作Redis服务器。Jedis底层使用了Java网络IO框架Netty和Java序列化框架Kryo,具有良好的性能和稳定性。

1.Jedis在各方面的功能

  1. 连接管理和连接池:

    • Jedis通过Jedis类提供了与Redis服务器建立连接和通信的功能。
    • Jedis内置了连接池功能,可以通过JedisPool类来管理连接池。连接池可以提高性能,减少每次创建和释放连接的开销。
  2. 数据类型支持:

    • Jedis支持Redis的所有数据类型,包括字符串、哈希表、列表、集合和有序集合等。
    • 对于每种数据类型,Jedis都提供了相应的方法来进行添加、获取、更新和删除等操作。
  3. 事务支持:

    • Jedis支持事务操作,可以将多个Redis命令放在一个事务中执行。
    • 通过Transaction类,可以将多个命令添加到事务中,然后一起提交或回滚,以保证操作的原子性。
  4. 管道支持:

    • Jedis支持管道操作,可以一次性发送多个命令,从而减少与Redis服务器之间的网络往返次数,提高性能。
    • 通过Pipeline类,可以将多个命令添加到管道中,然后一次性发送给Redis服务器。
  5. 发布-订阅模式支持:

    • Jedis支持Redis的发布-订阅模式,可以用于实现消息队列、事件通知等功能。
    • 通过JedisPubSub类,可以创建一个订阅器来监听指定的频道,并在收到消息时执行相应的回调方法。
  6. 数据序列化和反序列化:

    • Jedis支持自定义数据序列化和反序列化,可以通过实现RedisSerializer接口来对数据进行自定义处理。
    • 默认情况下,Jedis使用Java的序列化机制来进行数据的序列化和反序列化,但也提供了其他序列化方式,如JSON、XML等。
  7. 高级特性支持:

    • Jedis提供了一些高级特性,如分布式锁、Lua脚本执行、位图操作、地理位置相关操作等。
    • 分布式锁可以实现分布式系统中的并发控制,确保同一时刻只有一个线程可以访问共享资源。
    • 通过JedisCluster类,可以方便地操作Redis集群,进行数据读写和管理。

2.特点

  1. 易于使用:Jedis提供了简单易用的API,使得Java开发人员可以轻松地与Redis进行交互,不需要编写复杂的网络通信和协议解析代码。

  2. 高性能:Jedis使用基于Netty的高性能通信框架,能够快速响应Redis服务器的请求,并且内置连接池功能,可以减少连接的创建和释放开销。

  3. 支持所有Redis数据类型:Jedis支持Redis的所有数据类型,包括字符串、哈希表、列表、集合和有序集合等,可以进行添加、获取、更新和删除等操作。

  4. 事务和管道支持:Jedis支持事务和管道操作,可以将多个命令一次性发送给Redis服务器,从而提高性能并保证操作的原子性。

  5. 发布-订阅模式支持:Jedis支持Redis的发布-订阅模式,可以用于实现消息队列、事件通知等功能。

  6. 数据序列化支持:Jedis支持自定义数据序列化方式,可以通过实现RedisSerializer接口来对数据进行自定义处理。

  7. 分布式锁支持:Jedis提供了分布式锁的实现,可以在分布式系统中实现并发控制,确保同一时刻只有一个线程可以访问共享资源。

  8. 高级特性支持:Jedis提供了一些高级特性,如Lua脚本执行、位图操作、地理位置相关操作等。

  9. 集群支持:Jedis通过JedisCluster类提供了集群操作功能,可以方便地操作Redis集群。

二、Java连接Redis

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

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

  •         关系数据库 是一种基于关系模型的数据库系统,其中数据以表格形式组织,并使用 SQL(Structured Query Language)进行查询和管理。在关系数据库中,数据由多个表格组成,每个表格包含多个行和列,每行代表一个记录,每列代表一个属性。关系数据库中的表格之间可以建立关系,通过这些关系可以实现数据的联合查询和更新。关系数据库最常见的例子是MySQL、Oracle和SQL Server等。
  •         非关系数据库(NoSQL)是相对于传统的关系数据库而言的,它采用了非关系数据模型来存储和处理数据。非关系数据库通常不使用表格,而是使用其他形式的数据结构,例如键值对、文档、图形等,以便更好地处理大量非结构化数据。NoSQL数据库通常具有较高的可扩展性、灵活性和性能,并且能够处理复杂的数据处理任务。非关系数据库最常见的例子是MongoDB、Cassandra和Redis等。

1.导入pom依赖

在maven项目中导入redis的pom依赖

    <!--redis--><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.9.0</version></dependency>

2.建立连接

先开启我们的Redis

package com.ctb.ssm.redis;import redis.clients.jedis.Jedis;/*** @author 彪* @remark* @create  2023-11-06 10:30*/
public class Demo1 {public static void main(String[] args) {Jedis jedis = new Jedis("localhost", 6379);//主机地址,端口号jedis.auth("123456");//密码System.out.println(jedis.ping());}
}

这样就连接成功啦 

三、Java操作Redis的常见类型数据存储

1.字符串

字符串是Redis中最简单的数据类型,也是最常见的数据类型之一。

package com.ctb.ssm.redis;// 导入Jedis库
import redis.clients.jedis.Jedis;public class StringExample {public static void main(String[] args) {// 创建Jedis对象,连接Redis服务器Jedis jedis = new Jedis("localhost");// 存储字符串数据jedis.set("name", "John Doe");// 获取字符串数据String name = jedis.get("name");System.out.println("Name: " + name);// 更新字符串数据jedis.set("name", "Jane Doe");name = jedis.get("name");System.out.println("Updated Name: " + name);// 删除字符串数据jedis.del("name");name = jedis.get("name");System.out.println("Deleted Name: " + name);// 关闭连接jedis.close();}
}

2.哈希表

哈希表是Redis中的一种 key-value 类型数据结构,它类似于Java中的Map。

// 导入Jedis库
import redis.clients.jedis.Jedis;package com.ctb.ssm.redis;import java.util.HashMap;
import java.util.Map;public class HashExample {public static void main(String[] args) {// 创建Jedis对象,连接Redis服务器Jedis jedis = new Jedis("localhost");// 存储哈希表数据Map<String, String> user = new HashMap<>();user.put("name", "John Doe");user.put("age", "30");user.put("email", "johndoe@example.com");jedis.hset("user:1", user);// 获取哈希表数据Map<String, String> storedUser = jedis.hgetAll("user:1");System.out.println("Name: " + storedUser.get("name"));System.out.println("Age: " + storedUser.get("age"));System.out.println("Email: " + storedUser.get("email"));// 更新哈希表数据jedis.hset("user:1", "age", "31");storedUser = jedis.hgetAll("user:1");System.out.println("Updated Age: " + storedUser.get("age"));// 删除哈希表数据jedis.hdel("user:1", "email");storedUser = jedis.hgetAll("user:1");System.out.println("Deleted Email: " + storedUser.get("email"));// 关闭连接jedis.close();}
}

3.列表

列表是Redis中的一种有序数据结构,它可以存储多个字符串类型的元素。

package com.ctb.ssm.redis;// 导入Jedis库
import redis.clients.jedis.Jedis;import java.util.List;public class ListExample {public static void main(String[] args) {// 创建Jedis对象,连接Redis服务器Jedis jedis = new Jedis("localhost");// 存储列表数据jedis.lpush("fruits", "apple");jedis.lpush("fruits", "banana");jedis.lpush("fruits", "orange");// 获取列表数据List<String> fruits = jedis.lrange("fruits", 0, -1);for (String fruit : fruits) {System.out.println("Fruit: " + fruit);}// 弹出列表元素String poppedFruit = jedis.lpop("fruits");System.out.println("Popped Fruit: " + poppedFruit);// 关闭连接jedis.close();}
}

4.集合

集合是Redis中的一种无序数据结构,它可以存储多个字符串类型的元素,且每个元素都是唯一的。

package com.ctb.ssm.redis;// 导入Jedis库
import redis.clients.jedis.Jedis;import java.util.Set;public class SetExample {public static void main(String[] args) {// 创建Jedis对象,连接Redis服务器Jedis jedis = new Jedis("localhost");// 存储集合数据jedis.sadd("tags", "java");jedis.sadd("tags", "python");jedis.sadd("tags", "javascript");// 获取集合数据Set<String> tags = jedis.smembers("tags");for (String tag : tags) {System.out.println("Tag: " + tag);}// 判断元素是否存在于集合中boolean exists = jedis.sismember("tags", "python");System.out.println("Python exists in tags set: " + exists);// 删除集合元素jedis.srem("tags", "python");exists = jedis.sismember("tags", "python");System.out.println("Python exists in tags set after removal: " + exists);// 关闭连接jedis.close();}
}

5.有序集合

有序集合是Redis中的一种有序数据结构,它可以存储多个字符串类型的元素,每个元素都有一个对应的分值,可以根据分值进行排序。

package com.ctb.ssm.redis;// 导入Jedis库
import redis.clients.jedis.Jedis;import java.util.Set;public class SortedSetExample {public static void main(String[] args) {// 创建Jedis对象,连接Redis服务器Jedis jedis = new Jedis("localhost");// 存储有序集合数据jedis.zadd("scores", 90, "Alice");jedis.zadd("scores", 80, "Bob");jedis.zadd("scores", 95, "Charlie");// 获取有序集合数据Set<String> topScorers = jedis.zrevrange("scores", 0, 2);for (String scorer : topScorers) {System.out.println("Top Scorer: " + scorer);}// 更新有序集合数据jedis.zincrby("scores", 5, "Alice");double aliceScore = jedis.zscore("scores", "Alice");System.out.println("Updated Alice Score: " + aliceScore);// 关闭连接jedis.close();}
}

四、Redis的实际应用场景实例

redis一般用于存储基本不会变换的数据:如会议状态等,在数据库存储的数值需翻译为所对应的状态如待开会议,历史会议等。

我们就可以用Redis去进行一个存储,然后根据对应的值查出对应的内容。

1.会议信息实体

package com.ctb.ssm.model;public class Meeting {private String id;private String name;private int state;// 构造方法、getter和setter省略
}

其中,state字段使用int类型表示,1代表待开会议,2代表历史会议,3代表发布会议

2.自定义注解

package com.ctb.ssm.annotation;import java.lang.annotation.*;@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface State {String value();int code();
}

在注解中通过value()方法获取会议状态名称,在code()方法获取会议状态数值。

3.创建切面类

用于在查询会议信息时遍历会议列表,并根据状态字段的值进行特殊处理

package com.ctb.ssm.Aspect;import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;@Aspect
@Component
public class MeetingAspect {private JedisPool jedisPool;public MeetingAspect() {JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();jedisPool = new JedisPool(jedisPoolConfig, "localhost", 6379);}@Around("execution(* com.example.MeetingService.getMeetings())")public Object processMeetings(ProceedingJoinPoint joinPoint) throws Throwable {Jedis jedis = jedisPool.getResource();try {List<Meeting> meetings = (List<Meeting>) joinPoint.proceed();for (Meeting meeting : meetings) {int stateCode = meeting.getState();// 根据stateCode将会议状态存储到Redis中jedis.hset("meeting_states", String.valueOf(stateCode), getStateNameByCode(stateCode));}return meetings;} finally {jedis.close();}}private String getStateNameByCode(int stateCode) {switch (stateCode) {case 1:return "待开会议";case 2:return "历史会议";case 3:return "发布会议";default:return "取消会议";}}
}

我们创建了一个JedisPool并初始化,用于获取Jedis实例来操作Redis。在processMeetings方法中,我们可以获取到查询到的会议列表meetings,并遍历每个Meeting对象。根据会议对象的状态字段 state,我们可以通过调用 jedis.hset() 方法将对应的会议状态名称存储到Redis的哈希表 "meeting_states" 中。

4.创建控制层(controller层)

@RestController
public class MeetingController {@Autowiredprivate MeetingService meetingService;@GetMapping("/meetings")public List<Meeting> getMeetings() {List<Meeting> meetings = meetingService.getMeetings();return meetings;}
}

我们在MeetingController中定义了一个接口 "/meetings",用于获取所有会议信息。在这个接口中,我们调用MeetingService的getMeetings方法获取所有会议信息,并直接返回给前端。

http://www.15wanjia.com/news/159585.html

相关文章:

  • 中国交通建设工程监督管理局网站织梦建站系统教程
  • 怎么看网站建设有多久ps网站设计与制作
  • 嘉兴做微网站好看的官网源码
  • 合肥金融网站设计辽宁城乡建设工程招投标网
  • 网站开发设计文案最新网站模板
  • 建站公司如何在抖音平台开店室内设计公司名字大全
  • 企业建站模版公司网站开发费用计入
  • 做视频点播网站要多少带宽重庆网站制作1000
  • 北京网站案例seo外包上海
  • 龙胜时代大厦 做网站网站相应速度
  • 东莞政务网站建设方案产品外观设计的重要性
  • 无锡网站建设兼职具有口碑的柳州网站建设哪家便宜
  • 除了阿里巴巴还有什么网站做外贸的网站点击量与排名
  • 网络营销分析河南seo公司
  • 写作网站挣钱对比统计局网站建设情况
  • 广州专业的做网站简单又快的科学小制作
  • wordpress建站打不开二级页面王也道长高清头像 微信
  • 广州企业建站网站厦门总全设计装饰工程有限公司
  • 怎么做切片网站晋江网站建设价格
  • 廊坊专业网站制作服务深圳网站建设公司电话
  • 大连html5网站建设费用怎么把地图放到网站上
  • 宝山区网站建设十堰做网站排名
  • 微舍 微网站 怎么做做网站用别人的图片
  • 广告店名字怎么取好抓取的网站如何做seo
  • 搜索网站建设推广优化响应式网站咨询
  • 网站手机客户端开发教程asp.net 4.0网站建设基础教程 下载
  • 高唐做网站推广百度网站标题优化
  • 帝国cms网站模板天门市网站建设
  • 涿州网站网站建设河北怎样做网站
  • ios认证 东莞网站建设做seo如何赚钱