Jedis客户端快速入门
初识Redis
Redis 是一个开源的,基于内存存储的、键值型的存储系统,它可以用作数据库、缓存和消息中间件。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。
执行速度: 读速度 11.2万次/秒 写速度8.6万/次 平均10万次/秒
其中键值型,是指Redis中存储的数据都是以key、value对的形式存储,而value支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists),集合(sets),有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。
Redis作为数据库是一个NoSql数据库,NoSQL则是相对于传统关系型数据库而言,有很大差异的一种数据库。
NoSQL
NoSql数据库。是相对于传统关系型数据库而言,有很大差异的一种特殊的数据库,因此也称之为非关系型数据库。
与关系型数据库的区别:
-
结构化与非结构化
传统关系型数据库是结构化数据,每一张表都有严格的约束信息,比如字段名、字段数据类型、字段约束等等信息,插入的数据必须遵守这些约束
而NoSql则对数据库格式没有严格约束,往往形式松散,自由。可以是键值型、也可以是文档型(ElasticSearch后期学习)、甚至可以是图格式
-
关联与非关联
传统数据库的表与表之间往往存在关联,例如外键
而非关系型数据库不存在关联关系,要维护关系要么靠代码中的业务逻辑,要么靠数据之间的耦合
-
查询方式
传统关系型数据库会基于Sql语句做查询,语法有统一标准
而不同的非关系数据库查询语法差异极大,五花八门各种各样
-
事务
传统关系型数据库能满足事务ACID的原则
而非关系型数据库往往不支持事务,或者不能严格保证ACID的特性,只能实现基本的一致性
-
存储方式
关系型数据库基于磁盘进行存储,会有大量的磁盘IO,对性能有一定影响
非关系型数据库,他们的操作更多的是依赖于内存来操作,内存的读写速度会非常快,性能自然会好一些
-
扩展性
关系型数据库集群模式一般是主从,主从数据一致,起到数据备份的作用,称为垂直扩展
非关系型数据库可以将数据拆分,存储在不同机器上,可以保存海量数据,解决内存大小有限的问题。称为水平扩展
关系型数据库因为表之间存在关联关系,如果做水平扩展会给数据查询带来很多麻烦
Jedis客户端
Jedis的官网地址: GitHub - redis/jedis: Redis Java client
快速入门
-
创建maven项目,引入依赖
<!--jedis--> <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.7.0</version> </dependency> <!--单元测试--> <dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>5.7.0</version><scope>test</scope> </dependency>
-
建立连接
新建一个单元测试,内容如下:
private Jedis jedis;@BeforeEachvoid setUp() {jedis = new Jedis("172.26.6.53", 6379);}
-
测试
@Testvoid testString() {// 存入数据String result = jedis.set("name", "虎哥");System.out.println("result = " + result);// 获取数据String name = jedis.get("name");System.out.println("name = " + name);}@Testvoid testHash() {// 插入hash数据jedis.hset("csmall:spu:2", "id", "2");jedis.hset("csmall:spu:2", "name", "iPhone13");// 获取Map<String, String> map = jedis.hgetAll("csmall:spu:2");System.out.println(map);}
-
释放资源
@AfterEach void tearDown() {if (jedis != null) {jedis.close();} }
Jedis连接池
Jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,因此我们推荐大家使用Jedis连接池代替Jedis的直连方式
有关池化思想,并不仅仅是这里会使用,很多地方都有,比如说我们的数据库连接池,比如我们tomcat中的线程池,这些都是池化思想的体现。
上一篇文章:Redis命令操作-CSDN博客https://blog.csdn.net/Z0412_J0103/article/details/143225721下一篇文章: