Redis SET 例子

Redis SET 例子


import java.util.Iterator;
import java.util.List;
import java.util.Set;

import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.Cursor;
import org.springframework.data.redis.core.ScanOptions;
import org.springframework.data.redis.core.ScanOptions.ScanOptionsBuilder;

public class TestRedisSet {
	
	private static JedisConnectionFactory getJedisConnectionFactory() {
		JedisConnectionFactory jcf = new JedisConnectionFactory();
		jcf.setHostName("127.0.0.1");
		jcf.setPort(6379);
		jcf.setPassword("123");
		jcf.afterPropertiesSet();
		return jcf;
	}

	private static RedisConnection getRedisConnection() {
		return getJedisConnectionFactory().getConnection();
	}

	public static void main(String[] args) {
		RedisConnection rc = getRedisConnection();
		
		//SADD 将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。
		long sAdd = rc.sAdd("man".getBytes(), 
				"a".getBytes(), 
				"b".getBytes(),
				"c".getBytes(), 
				"c".getBytes(), 
				"d".getBytes(), 
				"e".getBytes(),
				"f".getBytes());
		System.out.println("SADD [" + sAdd + "]");
		
		//SMEMBERS 返回集合 key 中的所有成员。
		Set<byte[]> sMembers = rc.sMembers("man".getBytes());
		Iterator<byte[]> itr = sMembers.iterator();
		while (itr.hasNext()) {
			System.out.println("SMEMBERS [" + new String(itr.next()) + "]");
		}
		
		//SCARD 返回集合 key 的基数(集合中元素的数量)。
		long sCard = rc.sCard("man".getBytes());
		System.out.println("SCARD [" + sCard + "]");
		
		//SDIFF
		Set<byte[]> sDiff = rc.sDiff("aset".getBytes(), "bset".getBytes());
		Iterator<byte[]> sDiffItr = sDiff.iterator();
		while (sDiffItr.hasNext()) {
			System.out.println("SDIFF [" + new String(sDiffItr.next()) + "]");
		}
		
		//SDIFFSTORE 这个命令的作用和 SDIFF 类似,但它将结果保存到 destination 集合,而不是简单地返回结果集。
		long sDiffStore = rc.sDiffStore(
				"cset".getBytes(), 
				"aset".getBytes(), 
				"bset".getBytes());
		System.out.println("SDIFFSTORE [" + sDiffStore + "]");
		
		//SINTER 返回一个集合的全部成员,该集合是所有给定集合的交集。
		Set<byte[]> sInter = rc.sInter("aset".getBytes(), "bset".getBytes());
		Iterator<byte[]> itrSInter = sInter.iterator();
		while (itrSInter.hasNext()) {
			System.out.println("SINTER [" + new String(itrSInter.next()) + "]");
		}
		
		//SINTERSTORE
		long sInterStore = rc.sInterStore(
				"dset".getBytes(), 
				"aset".getBytes(), 
				"bset".getBytes());
		System.out.println("SINTERSTORE [" + sInterStore + "]");
		
		//SISMEMBER 判断 member 元素是否集合 key 的成员。
		boolean sIsMember = rc.sIsMember("man".getBytes(), "a".getBytes());
		System.out.println("SISMEMBER [" + sIsMember + "]");
		
		//SMOVE 将 member 元素从 source 集合移动到 destination 集合。
		boolean sMove = rc.sMove("man".getBytes(), "men".getBytes(), "f".getBytes());
		System.out.println("SMOVE [" + sMove + "]");
		
		//SPOP 移除并返回集合中的一个随机元素。
		byte[] sPop = rc.sPop("man".getBytes());
		System.out.println("SPOP [" + new String(sPop) + "]");
		
		//SRANDMEMBER 如果命令执行时,只提供了 key 参数,那么返回集合中的一个随机元素。
		/**
		 	从 Redis 2.6 版本开始, SRANDMEMBER 命令接受可选的 count 参数:
			如果 count 为正数,且小于集合基数,那么命令返回一个包含 count 个元素的数组,
			数组中的元素各不相同。如果 count 大于等于集合基数,那么返回整个集合。
			如果 count 为负数,那么命令返回一个数组,数组中的元素可能会重复出现多次,而数组的长度为 count 的绝对值。
		*/
		byte[] sRandMember = rc.sRandMember("man".getBytes());
		System.out.println("SRANDMEMBER [" + new String(sRandMember) + "]");
		
		List<byte[]> sRandMemberListP = rc.sRandMember("man".getBytes(), 2);
		for (byte[] value : sRandMemberListP) {
			System.out.println("sRandMemberListP [" + new String(value) + "]");
		}
		
		List<byte[]> sRandMemberListC = rc.sRandMember("man".getBytes(), -4);
		for (byte[] value : sRandMemberListC) {
			System.out.println("sRandMemberListC [" + new String(value) + "]");
		}
		
		//SREM 移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略。
		long sRem = rc.sRem("man".getBytes(), "a".getBytes(), "b".getBytes());
		System.out.println("SREM [" + sRem + "]");
		
		//SUNION 返回一个集合的全部成员,该集合是所有给定集合的并集。
		Set<byte[]> sUnion = rc.sUnion("aset".getBytes(), "bset".getBytes());
		Iterator<byte[]> itrSUnion = sUnion.iterator();
		while (itrSUnion.hasNext()) {
			System.out.println("SUNION [" + new String(itrSUnion.next()) + "]");
		}
		
		//SUNIONSTORE 这个命令类似于 SUNION 命令,但它将结果保存到 destination 集合,而不是简单地返回结果集。
		long sUnionStore = rc.sUnionStore("eset".getBytes(), "aset".getBytes(), "bset".getBytes());
		System.out.println("SUNIONSTORE [" + sUnionStore + "]");
		
		//SSCAN
		ScanOptionsBuilder sob = ScanOptions.scanOptions().count(1);
		ScanOptions options = sob.build();
		Cursor<byte[]>  sScan = rc.sScan("man".getBytes(), options);
		while (sScan.hasNext()) {
			System.out.println("SSCAN [" + new String(sScan.next()) + "]");
		}
		
	}

}

Redis 中,`SET` 和 `GET` 是最基本且常用的命令,用于进行数据的存储与读取操作。这两个命令属于 Redis 的字符串(String)数据类型操作的一部分。 ### SET 命令 `SET` 命令用于将一个键值对存储到 Redis 中。如果键已经存在,则会覆盖其值;如果键不存在,则会创建一个新的键值对。 #### 基本语法: ```bash SET key value ``` #### 示例: ```bash 127.0.0.1:6379> SET foo bar OK ``` 在上面的例子中,我们使用 `SET` 命令将键 `foo` 的值设置为 `"bar"`。返回 `OK` 表示操作成功[^2]。 ### GET 命令 `GET` 命令用于获取指定键的值。如果键不存在,则返回 `nil`。 #### 基本语法: ```bash GET key ``` #### 示例: ```bash 127.0.0.1:6379> GET foo "bar" ``` 在上面的例子中,我们使用 `GET` 命令获取键 `foo` 的值,结果为 `"bar"`。这表明 Redis 成功地从数据库中检索出了该键的值[^2]。 ### 多次使用 SET 和 GET 可以在同一个连接中多次使用 `SET` 和 `GET` 命令来操作不同的键值对。例如: ```bash 127.0.0.1:6379> SET name zhangsan OK 127.0.0.1:6379> GET name "zhangsan" ``` 在这个例子中,我们首先使用 `SET` 命令将键 `name` 的值设置为 `"zhangsan"`,然后使用 `GET` 命令读取该键的值,并成功返回 `"zhangsan"` [^5]。 ### 注意事项 1. **键的命名**:键名应尽量具有可读性和唯一性,避免冲突。例如,使用 `user:1001:username` 来表示用户 ID 为 1001 的用户名。 2. **值的类型**:虽然 `SET` 和 `GET` 主要用于字符串类型,但 Redis 支持多种数据结构,如哈希(Hash)、列表(List)、集合(Set)等,这些数据结构也有对应的命令进行操作[^1]。 3. **过期时间**:可以通过 `EXPIRE` 命令为键设置过期时间,使其在一定时间后自动删除。例如: ```bash 127.0.0.1:6379> EXPIRE foo 10 ``` 这条命令将键 `foo` 的过期时间设置为 10 秒后,10 秒后该键将被自动删除。 ### 总结 `SET` 和 `GET` 是 Redis 中最基础的命令之一,适用于简单的键值存储和读取场景。它们是构建更复杂功能的基础,并且可以与其他 Redis 命令结合使用以实现更高级的功能。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值