首页
3D照片墙
统计
留言
Search
1
1.OAuth 的简单理解
115 阅读
2
多个拦截器的执行顺序
105 阅读
3
基于Annotation方式的声明式事务
102 阅读
4
6.设计模式汇总
101 阅读
5
Unity 依赖注入
98 阅读
Java
JDBC
Spring
Spring MVC
SpringBoot
SpringCloud
MybatisPlus
Mybatis
Maven
SpringSecurity
JVM
java注解与反射
Java JUC并发编程
SSM
.NET
IdentityServer4
EF
.Net Core
AbpVNext + DDD
.NET MVC Api
前端
Jquery&JavaScript
uniapp
VUE
Echars
Vue底层原理
Python
Django
软考笔记
软件设计师
1.计算机组成与体系结构
10.面向对象技术
11.UML类图建模
12.面向对象程序设计
13.数据结构
14.算法基础
16.知识产权标准化
17.程序设计语言
2.操作系统
3.数据库
4.数据库设计
5.计算机网络
6.信息安全
7.系统开发基础
8.项目管理
9.数据流图
架构设计
CQRS架构
DDD架构
数据库技术
SQL锁
SqlServer
Oracle 主从备份
Oracle RAC集群
Mysql
云原生/容器技术
kubernetes
Docker
数据结构与算法
常用中间件
Redis
RabbitMQ 消息队列
ElasticSearch
其他
PHP
OAuth 2.0
WebSocket
ArkTs Harmony 开发
运维
Search
标签搜索
排序算法
vue
算法
遍历
docker
线性
数组
dom
synchronized
数据库
xml语言
log4j
bigint
静态函数
静态方法
哈夫曼树
const
冒泡排序
商标设计
命令模式
Bi8bo
累计撰写
304
篇文章
累计收到
6
条评论
首页
栏目
Java
JDBC
Spring
Spring MVC
SpringBoot
SpringCloud
MybatisPlus
Mybatis
Maven
SpringSecurity
JVM
java注解与反射
Java JUC并发编程
SSM
.NET
IdentityServer4
EF
.Net Core
AbpVNext + DDD
.NET MVC Api
前端
Jquery&JavaScript
uniapp
VUE
Echars
Vue底层原理
Python
Django
软考笔记
软件设计师
1.计算机组成与体系结构
10.面向对象技术
11.UML类图建模
12.面向对象程序设计
13.数据结构
14.算法基础
16.知识产权标准化
17.程序设计语言
2.操作系统
3.数据库
4.数据库设计
5.计算机网络
6.信息安全
7.系统开发基础
8.项目管理
9.数据流图
架构设计
CQRS架构
DDD架构
数据库技术
SQL锁
SqlServer
Oracle 主从备份
Oracle RAC集群
Mysql
云原生/容器技术
kubernetes
Docker
数据结构与算法
常用中间件
Redis
RabbitMQ 消息队列
ElasticSearch
其他
PHP
OAuth 2.0
WebSocket
ArkTs Harmony 开发
运维
页面
3D照片墙
统计
留言
搜索到
17
篇与
的结果
2024-02-27
RabbitMq入门
1、Message(消息) 消息是不具名的,它由消息头和消息体组成。消息体是不透明的,而消息头则由一系列的可选属性组成,这些属性包括routing-key(路由键)、priority(相对于其他消息的优先权)、delivery-mode(传输模式,指出该消息可能需要持久化存储)等。 2、Publisher 消息生产者,也是一个向交换器发布消息的客户端应用程序,就是投递消息的程序。 3、Exchange 交换器,用来接收生产者发送的消息并将这些消息路由给服务器中的队列。消息交换机,它指定消息按什么规则,路由到哪个队列。 4、Routing Key 路由关键字,exchange根据这个关键字进行消息投递。 5、Binding(绑定) 用于消息队列和交换器之间的关联。一个绑定就是基于路由键将交换器和消息队列连接起来的路由规则,所以可以将交换器理解成一个由绑定构成的路由表。 它的作用就是把exchange和queue按照路由规则绑定起来。 绑定其实就是关联了exchange和queue,或者这么说:queue对exchange的内容感兴趣,exchange要把它的Message deliver到queue。 6、Queue(消息队列) 消息的载体,每个消息都会被投到一个或多个队列,等待消费者连接到这个队列将其取走。它是消息的容器,也是消息的终点。 7、Connection 网络连接,例如一个TCP连接。 8、Channel(信道,通道) 消息通道,在客户端的每个连接里,可建立多个channel。 多路复用连接中的一条独立双向数据流通道。信道是建立在真实的TCP连接内的虚拟连接,AMQP命令都是通过信道发出去的,不管是发布消息、订阅队列还是接收消息,这些动作都是通过信道完成。因为对于操作系统来说建立和销毁TCP都是非常昂贵的开销,所以引入了信道的概念以达到复用一条TCP连接的目的。 9、Consumer 消息消费者,表示一个从消息队列中取得消息的客户端应用程序,就是接受消息的程序。 10、Virtual Host 虚拟主机,表示一批交换器、消息队列和相关对象。一个broker里可以有多个vhost,用作不同用户的权限分离。虚拟主机是共享相同的身份认证和加密环境的独立服务器域。每个vhost本质上就是一个mini版的rabbitmq服务器,拥有自己的队列、交换器、绑定和权限机制。 vhost是AMQP概念的基础,必须在连接时指定,rabbitmq默认的vhost是 / 。 11、Broker 表示消息队列服务器实体。它提供一种传输服务,它的角色就是维护一条从生产者到消费者的路线,保证数据能按照指定的方式进行传输。
2024年02月27日
68 阅读
0 评论
63 点赞
2023-12-27
Redis五大基本类型底层数据结构
Redis——Redis数据结构底层原理_redis底层原理-CSDN博客
2023年12月27日
14 阅读
0 评论
90 点赞
2023-10-07
RedisTemplate之opsForValue使用说明
1、set(K key, V value) 新增一个字符串类型的值,key是键,value是值。 redisTemplate.opsForValue().set("stringValue","bbb"); 2、get(Object key) 获取key键对应的值。 String stringValue = redisTemplate.opsForValue().get("key") 3、append(K key, String value) 在原有的值基础上新增字符串到末尾。 redisTemplate.opsForValue().append("key", "appendValue"); String stringValueAppend = redisTemplate.opsForValue().get("key"); System.out.println("通过append(K key, String value)方法修改后的字符串:"+stringValueAppend); 4、get(K key, long start, long end) 截取key键对应值得字符串,从开始下标位置开始到结束下标的位置(包含结束下标)的字符串。 String cutString = redisTemplate.opsForValue().get("key", 0, 3); System.out.println("通过get(K key, long start, long end)方法获取截取的字符串:"+cutString); 5、getAndSet(K key, V value) 获取原来key键对应的值并重新赋新值。 String oldAndNewStringValue = redisTemplate.opsForValue().getAndSet("key", "ccc"); System.out.print("通过getAndSet(K key, V value)方法获取原来的值:" + oldAndNewStringValue ); String newStringValue = redisTemplate.opsForValue().get("key"); System.out.println("修改过后的值:"+newStringValue); 6、setBit(K key, long offset, boolean value) key键对应的值value对应的ascii码,在offset的位置(从左向右数)变为value。 redisTemplate.opsForValue().setBit("key",1,false); newStringValue = redisTemplate.opsForValue().get("key")+""; System.out.println("通过setBit(K key,long offset,boolean value)方法修改过后的值:"+newStringValue); 7、getBit(K key, long offset) 判断指定的位置ASCII码的bit位是否为1。 boolean bitBoolean = redisTemplate.opsForValue().getBit("key",1); System.out.println("通过getBit(K key,long offset)方法判断指定bit位的值是:" + bitBoolean); 8、size(K key) 获取指定字符串的长度 Long stringValueLength = redisTemplate.opsForValue().size("key"); System.out.println("通过size(K key)方法获取字符串的长度:"+stringValueLength); 9、increment(K key, double delta) 以增量的方式将double值存储在变量中。 double stringValueDouble = redisTemplate.opsForValue().increment("doubleKey",5); System.out.println("通过increment(K key, double delta)方法以增量方式存储double值:" + stringValueDouble); 10、increment(K key, long delta) 以增量的方式将long值存储在变量中。 double stringValueLong = redisTemplate.opsForValue().increment("longKey",6); System.out.println("通过increment(K key, long delta)方法以增量方式存储long值:" + stringValueLong); 11、setIfAbsent(K key, V value) 如果键不存在则新增,存在则不改变已经有的值。 boolean absentBoolean = redisTemplate.opsForValue().setIfAbsent("absentKey","fff"); System.out.println("通过setIfAbsent(K key, V value)方法判断变量值absentValue是否存在:" + absentBoolean); if(absentBoolean){ String absentValue = redisTemplate.opsForValue().get("absentKey")+""; System.out.print(",不存在,则新增后的值是:"+absentValue); boolean existBoolean = redisTemplate.opsForValue().setIfAbsent("absentKey","eee"); System.out.print(",再次调用setIfAbsent(K key, V value)判断absentValue是否存在并重新赋值:" + existBoolean); if(!existBoolean){ absentValue = redisTemplate.opsForValue().get("absentKey")+""; System.out.print("如果存在,则重新赋值后的absentValue变量的值是:" + absentValue); 12、set(K key, V value, long timeout, TimeUnit unit) 设置变量值的过期时间。 redisTemplate.opsForValue().set("timeOutKey", "timeOut", 5, TimeUnit.SECONDS); String timeOutValue = redisTemplate.opsForValue().get("timeOutKey")+""; System.out.println("通过set(K key, V value, long timeout, TimeUnit unit)方法设置过期时间,过期之前获取的数据:"+timeOutValue); Thread.sleep(5*1000); timeOutValue = redisTemplate.opsForValue().get("timeOutKey")+""; System.out.print(",等待10s过后,获取的值:"+timeOutValue); 13、set(K key, V value, long offset) 覆盖从指定位置开始的值。 redisTemplate.opsForValue().set("absentKey","dd",1); String overrideString = redisTemplate.opsForValue().get("absentKey"); System.out.println("通过set(K key, V value, long offset)方法覆盖部分的值:"+overrideString); 14、multiSet(Map<? extends K,? extends V> map) 设置map集合到redis。 Map valueMap = new HashMap(); valueMap.put("valueMap1","map1"); valueMap.put("valueMap2","map2"); valueMap.put("valueMap3","map3"); redisTemplate.opsForValue().multiSet(valueMap); 15、multiGet(Collection keys) 根据集合取出对应的value值。 //根据List集合取出对应的value值 List paraList = new ArrayList(); paraList.add("valueMap1"); paraList.add("valueMap2"); paraList.add("valueMap3"); List<String> valueList = redisTemplate.opsForValue().multiGet(paraList); for (String value : valueList){ System.out.println("通过multiGet(Collection<K> keys)方法获取map值:" + value); } 16、multiSetIfAbsent(Map<? extends K,? extends V> map) Map valueMap = new HashMap(); valueMap.put("valueMap1","map1"); valueMap.put("valueMap2","map2"); valueMap.put("valueMap3","map3"); redisTemplate.opsForValue().multiSetIfAbsent(valueMap);
2023年10月07日
72 阅读
0 评论
34 点赞
2023-05-12
RabbitMQ依赖引入
消费端 <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>5.6.0</version> </dependency>
2023年05月12日
42 阅读
0 评论
47 点赞
2022-12-14
Redis 稳定集群 搭建方案
当集群中超过或等于1/2节点不可用时,整个集群不可用 搭建奇数个节点 稳定性比偶数个节点强
2022年12月14日
35 阅读
0 评论
21 点赞
1
2
3
4