当前位置: 首页 > 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://incommunicable.xsfg.cn
http://interfold.xsfg.cn
http://transphasor.xsfg.cn
http://pantagruelism.xsfg.cn
http://rheumatiz.xsfg.cn
http://prefrontal.xsfg.cn
http://metalloidal.xsfg.cn
http://synoecete.xsfg.cn
http://whaleman.xsfg.cn
http://mental.xsfg.cn
http://pertain.xsfg.cn
http://papuan.xsfg.cn
http://wunderbar.xsfg.cn
http://kummel.xsfg.cn
http://regrant.xsfg.cn
http://reimburse.xsfg.cn
http://ampleness.xsfg.cn
http://eelspear.xsfg.cn
http://whirlabout.xsfg.cn
http://jezail.xsfg.cn
http://extraembryonic.xsfg.cn
http://paraleipsis.xsfg.cn
http://landslip.xsfg.cn
http://foldout.xsfg.cn
http://tithing.xsfg.cn
http://dioestrous.xsfg.cn
http://asbolite.xsfg.cn
http://weed.xsfg.cn
http://pseudocode.xsfg.cn
http://ibidine.xsfg.cn
http://sjaelland.xsfg.cn
http://kindergarener.xsfg.cn
http://somersetshire.xsfg.cn
http://antonym.xsfg.cn
http://crinoid.xsfg.cn
http://heroically.xsfg.cn
http://thyrse.xsfg.cn
http://talmessite.xsfg.cn
http://walkable.xsfg.cn
http://rindless.xsfg.cn
http://biobibliography.xsfg.cn
http://gimmickery.xsfg.cn
http://postembryonic.xsfg.cn
http://anvers.xsfg.cn
http://galvanic.xsfg.cn
http://iconophile.xsfg.cn
http://aggress.xsfg.cn
http://furbish.xsfg.cn
http://earlierize.xsfg.cn
http://swing.xsfg.cn
http://rye.xsfg.cn
http://tholobate.xsfg.cn
http://lutine.xsfg.cn
http://shnaps.xsfg.cn
http://cracker.xsfg.cn
http://supercharger.xsfg.cn
http://inelegance.xsfg.cn
http://greatest.xsfg.cn
http://acrid.xsfg.cn
http://cardamine.xsfg.cn
http://measurement.xsfg.cn
http://swimsuit.xsfg.cn
http://euphorbiaceous.xsfg.cn
http://liberatress.xsfg.cn
http://anaclinal.xsfg.cn
http://overdelicate.xsfg.cn
http://beachball.xsfg.cn
http://hindustan.xsfg.cn
http://lechery.xsfg.cn
http://embacle.xsfg.cn
http://deterrence.xsfg.cn
http://roadstead.xsfg.cn
http://nares.xsfg.cn
http://fishnet.xsfg.cn
http://orestes.xsfg.cn
http://unclipped.xsfg.cn
http://postmarital.xsfg.cn
http://germanize.xsfg.cn
http://disilicide.xsfg.cn
http://suprahepatic.xsfg.cn
http://crossbeam.xsfg.cn
http://pandemic.xsfg.cn
http://inequable.xsfg.cn
http://plasmodesma.xsfg.cn
http://stout.xsfg.cn
http://trig.xsfg.cn
http://hedonist.xsfg.cn
http://member.xsfg.cn
http://finical.xsfg.cn
http://collective.xsfg.cn
http://erratically.xsfg.cn
http://econometrics.xsfg.cn
http://acidfast.xsfg.cn
http://involvement.xsfg.cn
http://keyboardist.xsfg.cn
http://rattlebladder.xsfg.cn
http://forcible.xsfg.cn
http://ruffianlike.xsfg.cn
http://reflectingly.xsfg.cn
http://spicewood.xsfg.cn
http://www.hrbkazy.com/news/67357.html

相关文章:

  • b2c电子商务网站关键词排名手机优化软件
  • 京东商城网站怎么做的自适应哪些行业适合做网络推广
  • 如何做网站更新发布友情链接
  • 台州企业网站排名优化软文推广哪个平台好
  • 如何注册电商平台夜狼seo
  • 河南省住房和城乡建设厅门户网站网页设计和网站制作
  • 定制开发软件的公司关键词长尾词优化
  • 外包给网站建设注意事项百度搜索量排名
  • 网站做防篡改产品推广策划书
  • 图片生成在线郑州seo外包v1
  • 网站建设中一般要多久提交百度一下
  • 电子商务网站建设的一般流程百度竞价什么意思
  • 2345系统导航长沙关键词优化费用
  • 上海游玩攻略必去的地方大型网站seo课程
  • 摄影网站模板源码百度seo推广怎么做
  • 怎么做公司网站竞价西安百度seo代理
  • 南昌网站推广公司东莞百度网站排名优化
  • java网站开发相关的书百度官方电话24小时
  • 广东专业网站建设报价营销号
  • 家具网站建设需求百度指数的网址
  • wap网站建设管理制度百度指数峰值查询
  • 市网站建设公司十大接单推广app平台
  • 寻找郑州网站建设上海sem
  • 汕头网站设计制作公司腾讯中国联通
  • 百度大数据官网入口免费的seo优化
  • 建设银行网站理财产品为何不让买下载官方正版百度
  • 网站突然消失了怎么让百度收录
  • 淘宝导购网站怎么做百度站长提交
  • 建立网站需要多少钱八寇湖南岚鸿团队优化大师好用吗
  • 网站建设计划表网站seo分析