rdis那点事儿

这篇博客探讨了Redis中有序集合和无序集合进行交集和并集操作的规则与注意事项。有序集合的交并集方法可以处理无序集合,但反之则不行。在执行交并集操作时,无序集合会被转换为有序集合,且分数默认为1。当使用乘法因子时,必须确保与集合数量对应,否则操作不会执行。同时,指定聚合方式时,也需提供对应的乘法因子,否则会引发错误。这些规则对有序集合的交并集操作同样适用。

有序集合和无序集合交/并集

$Redis = new Redis();
$Redis->connect(‘127.0.0.1’, 6379);
$Redis->select(5);

for ($i=1; $i<11; $i++) {
$Redis->sAdd(‘set:test’, $i);
}

for ($i=10; $i<21; $i++) {
R e d i s − > z A d d ( ′ z s e t : t e s t ′ , ( 100 + Redis->zAdd('zset:test', (100+ Redis>zAdd(zset:test,(100+i), $i);
}

for ($i=21; $i<31; $i++) {
R e d i s − > z A d d ( ′ z s e t : t e s t 2 ′ , ( 100 + Redis->zAdd('zset:test2', (100+ Redis>zAdd(zset:test2,(100+i), $i);
}

r e s u l t 1 = result1 = result1=Redis->zUnionStore(‘zset:union1’, array(‘zset:test’, ‘set:test’));//返回20
r e s u l t 2 = result2 = result2=Redis->zUnionStore(‘zset:union2’, array(‘set:test’, ‘zset:test’));//返回20
$result3 = $Redis->zInter(‘zset:inster1’, array(‘zset:test’, ‘set:test’));//返回1
$result4 = $Redis->zInter(‘zset:inster2’, array(‘set:test’, ‘zset:test’));//返回1

$result5 = $Redis->sUnionStore(‘set:union1’, ‘zset:test’, ‘set:test’);//不执行
$result6 = $Redis->sUnionStore(‘set:union2’, ‘set:test’, ‘zset:test’);//不执行
$result7 = $Redis->sinterstore(‘set:inster1’, ‘zset:test’, ‘set:test’);//不执行
$result8 = $Redis->sinterstore(‘set:inster2’, ‘set:test’, ‘zset:test’);//不执行

1、有序和无序集合的交并集操作,只能用有序集合的交并集方法进行,用无序集合的交并集方法不行,连返回值都没有,说明是方法不执行。

2、有序和无序集合的交并集后,无序集合的分是1(其实是给无序集合的元素加上分并赋值1,当有序集合用),双方都有的元素,它的分默认是相加。比如:元素10,它的分是110 + 1 = 111。

3、如果给有序集合的并集方法加乘法因子,则有多少个集合合并,就要有多少个乘法因子,否则方法不会执行,也不会报错。
不会执行,出现的结果有2种:1.之前结果集不存在的,则不会创建。2.之前有结果集的,则不会修改没变化,原先的值是什么,执行后还是什么。
例:$Redis->zUnionStore(‘zset:union1’, array(‘zset:test’, ‘set:test’, ‘zset:test2’), array(1, 3)); //方法不执行
$Redis->zUnionStore(‘zset:union1’, array(‘zset:test’, ‘set:test’, ‘zset:test2’), array(1, 3, 1));//方法执行

4、如果需要指定结果集的聚合方式,则也要指定乘法因子,否则会报错。
例:$Redis->zUnionStore(‘zset:union1’, array(‘zset:test’, ‘set:test’), ‘min’); //报错
$Redis->zUnionStore(‘zset:union1’, array(‘zset:test’, ‘set:test’), array(1, 1), ‘min’);//方法执行

——我们确实不需要改变乘法因子的,也要加上去,按默认值1加上去。
——第3、4点对有序集合的交并集方法都适用。
——用有序集合的交并集方法处理无序集合,会先把无序集合转成有序集合再进行处理;反过来,用无序集合的交并集方法处理有序集合,则不会先把有序集合转成无序集合再进行处理。

03-08
### 关于 Redis 教程和文档 #### StackExchange.Redis 的中文使用文档 StackExchange.Redis 是由 Stack Overflow 开发的一个高性能的 Redis C# 客户端,广泛应用于 .NET 应用程序中。此客户端可以通过 NuGet 进行安装: ```bash dotnet add package StackExchange.Redis ``` 该库的基本介绍以及使用指南可以在项目的 `README.md` 文件找到[^1]。 #### Redis 功能扩展模块 除了基本的数据结构支持外,Redis 支持多种模块来增强其能力。比如 RedisJSON 模块可以用来处理 JSON 数据;而 RediSearch 则提供高效的全文检索服务[^2]。 #### Java 中基于 Spring Data Redis 的开发实践 对于希望集成 Redis 至 Java 应用中的开发者来说,Spring Data Redis 提供了一个方便的方式来进行交互。通过定义一个配置类并创建 `RedisTemplate` 对象实例,能够轻松实现对 Redis 的读写操作。下面是一个简单的例子展示如何构建这样的模板对象: ```java @Configuration @Slf4j public class RedisConfiguration { @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory){ RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setConnectionFactory(factory); template.setKeySerializer(new StringRedisSerializer()); return template; } } ``` 这段代码展示了怎样在一个 Spring Boot 或者其他基于 Spring Framework 的应用程序里设置好连接到 Redis 所需的基础组件[^3]。 #### 使用 Redisson 实现分布式锁和其他高级特性 为了更进一步提升应用的功能性和可靠性,在某些场景下可能需要用到像 Redisson 这样的工具包。它不仅简化了许多常见的任务(如锁定机制),还提供了更多实用的服务给开发者们去探索和利用[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值