SpringBoot(十)_springboot集成Redis
Redis 介绍
Redis是一款开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存也可持久化的日志型、Key-Value高性能数据库。
数据模型
Redis 数据模型不仅与关系数据库管理系统(RDBMS)不同,也不同于任何简单的 NoSQL 键-值数据存储。Redis 数据类型类似于编程语言的基础数据类型,所以开发人员感觉很自然。每个数据类型都支持适用于其类型的操作。受支持的数据类型包括:
- string(字符串)
- hash(哈希)
- list(列表)
- set(集合)
- zset(sorted set:有序集合)
关键优势
Redis 的优势包括它的速度、它对富数据类型的支持、它的操作的原子性,以及它的通用性:
- 读速度为110000次/s,写速度为81000次/s,性能极高。
- 丰富的数据类型,Redis 对大多数开发人员已知道的大多数数据类型提供了原生支持,这使得各种问题得以轻松解决。
- 原子性,因为所有 Redis 操作都是原子性的,所以多个客户端会并发地访问一个 Redis 服务器,获取相同的更新值。
- 丰富的特性,Redis 是一个多效用工具,有非常多的应用场景,包括缓存、消息队列(Redis 原生支持发布/订阅)、短期应用程序数据(如 Web 会话、Web 页面命中计数)等。
springboot集成Redis
1、创建集成redis的springboot项目
我直接用idea创建一个新的工程,在创建的时候,直接集成Redis,如下图
2.application 配置(application.yml)
spring: redis: # Redis 服务器地址 host: 192.168.142.128 # Redis 服务器连接端口 port: 6379 # Redis 服务器连接密码(默认为空) password: # Redis 数据库索引(默认为0) database: 1 jedis: pool: # 连接池最大连接数(使用负值表示没有限制) max-active: 8 # 连接池最大阻塞等待时间(使用负值表示没有限制) max-wait: -1 # 连接池中的最大空闲连接 max-idle: 8
3、Redis 对多种数据类型的操作
这里我直接在Test类中进行操作,注入RedisTemplate
@RunWith(SpringRunner.class) @SpringBootTest public class RedisDemo01ApplicationTests { @Resource private RedisTemplate redisTemplate; @Test public void contextLoads() { }
- String类型
/** * 测试存储String */ @Test public void testString(){ redisTemplate.opsForValue().set("maomao", "hello"); System.out.println(redisTemplate.opsForValue().get("maomao").toString()); } //输出hello
- hash类型
hash set 的时候需要传入三个参数,第一个为 key,第二个为 field,第三个为存储的值。一般情况下 Key 代表一组数据,field 为 key 相关的属性,而 value 就是属性对应的值.
/** * hash */ @Test public void testHash() { HashOperations<String, Object, Object> hash = redisTemplate.opsForHash(); hash.put("hash","hello","java"); String value=(String) hash.get("hash","hello"); System.out.println("hash value :"+value); } //输出 hash value :java
- list类型
Redis list 的应用场景非常多,也是 Redis 最重要的数据结构之一。 使用 List 可以轻松的实现一个队列,List 典型的应用场景就是消息队列,可以利用 list 的 PUSH 操作,将任务存在 list 中,然后工作线程再用 POP 操作将任务取出进行执行。
@Test public void testListPop() { String key="list"; redisTemplate.delete(key); ListOperations<String, String> list = redisTemplate.opsForList(); list.leftPush(key,"just"); list.leftPush(key,"do"); list.leftPush(key,"it"); String value=list.leftPop(key); System.out.println("list value :"+value); } //输出结果 list value :it
使用 range 来读取,range 后面的两个参数就是插入数据的位置,输入不同的参数就可以取出队列中对应的数据。
@Test public void testListRange() { String key="list"; redisTemplate.delete(key); ListOperations<String, String> list = redisTemplate.opsForList(); list.rightPush(key,"just"); list.rightPush(key,"do"); list.rightPush(key,"it"); List<String> values=list.range(key,0,3); for (String v:values){ System.out.println("list range :"+v); } } //输出结果 //list range :just //list range :do //list range :it
- set类型
Redis set 对外提供的功能与 list 类似是一个列表的功能,特殊之处在于 set 是可以自动排重的,当需要存储一个列表数据,又不希望出现重复数据时,set 是一个很好的选择,并且 set 提供了判断某个成员是否在一个 set 集合内的重要接口,这个也是 list 所不能提供的。
@Test public void testSet(){ String key = "set"; redisTemplate.delete(key); SetOperations<String,String> set = redisTemplate.opsForSet(); set.add(key,"just"); set.add(key,"do"); set.add(key,"do"); set.add(key,"it"); Set<String> values = set.members(key); for (String value:values){ System.out.println("set value :"+value); } } //输出结果 //set value :just //set value :it //set value :do
Redis 为集合提供了求交集、并集、差集等操作,可以非常方便的使用
@Test public void testSetMore() { SetOperations<String, String> set = redisTemplate.opsForSet(); String key1="setMore1"; String key2="setMore2"; set.add(key1,"just"); set.add(key1,"do"); set.add(key1,"do"); set.add(key1,"it"); set.add(key2,"java"); set.add(key2,"do"); Set<String> diffs=set.difference(key1,key2); for (String v:diffs){ System.out.println("diffs set value :"+v); } //输出 //diffs set value :it //diffs set value :just String key3="setMore3"; String key4="setMore4"; set.add(key3,"just"); set.add(key3,"do"); set.add(key3,"java"); set.add(key4,"it"); set.add(key4,"do"); set.add(key4,"hello"); Set<String> unions=set.union(key3,key4); for (String v:unions){ System.out.println("unions value :"+v); } //输出 //unions value :do //unions value :java //unions value :just //unions value :it //unions value :hello }
- zset
Redis sorted set 的使用场景与 set 类似,区别是 set 不是自动有序的,而 sorted set 可以通过用户额外提供一个优先级(score)的参数来为成员排序,并且是插入有序,即自动排序。
@Test public void testZset(){ String key="zset"; redisTemplate.delete(key); ZSetOperations<String, String> zset = redisTemplate.opsForZSet(); zset.add(key,"just",1); zset.add(key,"now",5); zset.add(key,"it",4); zset.add(key,"do",3); Set<String> zsets=zset.range(key,0,3); for (String v:zsets){ System.out.println("zset value :"+v); } //zset value :just //zset value :do //zset value :it //zset value :now Set<String> zsetB=zset.rangeByScore(key,0,3); for (String v:zsetB){ System.out.println("zsetB value :"+v); } //zsetB value :just //zsetB value :do }
4.Redis 其他的操作
- 超时失效
/** * 测试超时失效 * @throws InterruptedException */ @Test public void testExpire() throws InterruptedException { ValueOperations<String, String> operations=redisTemplate.opsForValue(); operations.set("expire", "java",100,TimeUnit.MILLISECONDS); Thread.sleep(1000); boolean exists=redisTemplate.hasKey("expire"); if(exists){ System.out.println("exists is true"); }else{ System.out.println("exists is false"); } } // 输出 exists is false
- 删除数据
/** * 删除数据 */ @Test public void testDelete() { ValueOperations<String, String> operations=redisTemplate.opsForValue(); operations.set("deletekey", "springboot"); redisTemplate.delete("deletekey"); //判断key是否还在 boolean exists=redisTemplate.hasKey("deletekey"); if(exists){ System.out.println("exists is true"); }else{ System.out.println("exists is false"); } } //输出 exists is false
5、封装
在实际的使用过程中,不会给每一个使用的类都注入 redisTemplate 来直接使用,一般都会对业务进行简单的包装,最后提供出来对外使用. 这里就不在展示
完整代码下载:github
学习不是要么0分,要么100分的。80分是收获;60分是收获;20分也是收获。有收获最重要。但是因为着眼于自己的不完美,最终放弃了,那就是彻底的0分了。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
一文盘点深度学习13个常见问题(附详细解答&学习资源)
从Facebook的研究到DeepMind的传奇算法,深度学习已经登上了数据科学界的顶峰。它带来了惊人的创新,不可思议的突破,而且在这一领域我们才刚起步! 不过如果你是这个领域的新手,“深度”这个词可能会让你产生怀疑。深度学习是当今这一行业最热门的话题之一,但不幸的是,它对大多数人来说是陌生的和神秘的。很多人的印象是深入学习涉及到大量的数学和统计知识。 如果你有类似的关于深度学习的问题,但不知道如何、何时、何地去提问-本文正是你要找的地方。这篇文章回答了你想知道的大部分内容。 在这篇文章中,我们将消除一些关于深度学习的神话,并回答关于这个领域的一些被广泛问到的问题。我们还提供了大量的资源让你起步。 令人兴奋的部分来了,深度学习并没有大多数人想象中的那么苦难。继续读下去,你会发现更多! 目录 Q1:什么是深度学习?为什么它如此受欢迎? Q2:深度
- 下一篇
使用fastcgi_finish_request提高页面响应速度
本文地址:http://www.laruence.com/2011/04/13/1991.html 文章转自:火丁笔记 当PHP运行在FastCGI模式时,PHP FPM提供了一个名为fastcgi_finish_request的方法.按照文档上的说法,此方法可以提高请求的处理速度,如果有些处理可以在页面生成完后再进行,就可以使用这个方法. 听起来可能有些茫然,我们通过几个例子来说明一下: <?php echo '例子:'; fastcgi_finish_request(); /* 响应完成, 关闭连接 */ /* 记录日志 */ file_put_contents('log.txt', '生存还是毁灭,这是个问题.'); ?> 通过浏览器访问此脚本, 结果发现并没有输出相应的字符串,但却生成了相应的文件.由此说明在调用fastcgi_finish_request后,客户端响应就已经结束,但与此同时服务端脚本却继续运行! 合理利用这个特性可以大大提升用户体验,趁热打铁再来一个例子: <?php echo '例子:'; file_put_contents('log.tx...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS6,CentOS7官方镜像安装Oracle11G
- Mario游戏-低调大师作品
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7