3.redis数据结构和常用命令(二)

1.字符串:

set key value :设置键值对
java程序中:redisTemplate.opsForValue.set(“key”,“value”)

get key :通过键取值
java程序中:redisTemplate.opsForValue.get(“key”)

del key:删除键值对
java程序中:redisTemplate.opsForValue.delete(“key”)

strlen key :求长度
java程序中:redisTemplate.opsForValue.size(“key”)

getset key value :修改key原来的值
java程序中:redisTemplate.opsForValue.getAndSet(“key”,“value”)

getrange key start end :获取子串 (redis元素下标按数组来算)
java程序中:redisTemplate.opsForValue.get(“key”,start,end)

append key value:将value追加到key原来的值
java程序中:redisTemplate.opsForValue.append(“key”,“value”)

简单的加减运算:(不支持乘除运算)
incr key :在原字段加1
java程序中:redisTemplate.opsForValue.increment(“key”,1)

incbyr key increment:在原字段加整数increment
java程序中:redisTemplate.opsForValue.increment(“key”,increment)

decr key:在原字段减1
java程序中:redisTemplate.getConnectionFactory().getConnection.decr(redisTemplate.getKeySerializer().serialize(“key”))

decrby key decrment:在原字段减整数decrement
redisTemplate.getConnectionFactory().getConnection.decr(redisTemplate.getKeySerializer().serialize(“key”),decrement)

incrbyfloat key increment:在原字段加浮点数increment

注意:1如果一开始就设置key为浮点数,那么接下来的所有操作都会失败
2所有关于减法的方法,原有值都必须是整数

2.Zset

1. 有序且独一无二的string元素集合集合,元素的排序是根据分值的大小排序

zadd key score1 value1 [score2 value2]:增加成员

zcard key:获取成员数

zcount key min max:根据分数区间返回成员数

zinterstore des numKeys key1 [key2]:将numKeys个集合的交集保存到des

zlexcount key min max:返回成员在min和max的成员数

zrange key start stop [withscores]:根据分数值返回成员,withscores表示连同分数一起返回

zrevrange key start stop [withscores]:与zrange相同,只是排序从大到小

zrank key member:求成员的排行

zscore key member:返回成员的分数

zrangebylex key min max:根据成员的大小排序

zrangebyscore key min max [withscore]:根据分数大小排序

zrevrange key start stop [withscores]

a

2.在java程序中

	ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
		RedisTemplate redisTemplate = applicationContext.getBean(RedisTemplate.class);
		// Spring提供接口TypedTuple操作有序集合
		Set<TypedTuple> set1 = new HashSet<TypedTuple>();
		Set<TypedTuple> set2 = new HashSet<TypedTuple>();
		
		int j = 9;
		for (int i = 1; i <= 9; i++) {
			j--;
			// 计算分数和值
			Double score1 = Double.valueOf(i);
			String value1 = "x" + i;
			Double score2 = Double.valueOf(j);
			String value2 = j % 2 == 1 ? "y" + j : "x" + j;
			// 使用Spring提供的默认TypedTuple——DefaultTypedTuple
			TypedTuple typedTuple1 = new DefaultTypedTuple(value1, score1);
			set1.add(typedTuple1);
			TypedTuple typedTuple2 = new DefaultTypedTuple(value2, score2);
			set2.add(typedTuple2);
		}
		
		// 将元素插入有序集合zset1
		redisTemplate.opsForZSet().add("zset1", set1);
		redisTemplate.opsForZSet().add("zset2", set2);
		
		// 统计总数
		Long size = null;
		size = redisTemplate.opsForZSet().zCard("zset1");
		
		// 计分数为score,那么下面的方法就是求3<=score<=6的元素
		size = redisTemplate.opsForZSet().count("zset1", 3, 6);
		
		Set set = null;
		// 从下标一开始截取5个元素,但是不返回分数,每一个元素是String
		set = redisTemplate.opsForZSet().range("zset1", 1, 5);
		printSet(set);
		
		// 截取集合所有元素,并且对集合按分数排序,并返回分数,每一个元素是TypedTuple
		set = redisTemplate.opsForZSet().rangeWithScores("zset1", 0, -1);
		printTypedTuple(set);
		
		// 将zset1和zset2两个集合的交集放入集合inter_zset
		size = redisTemplate.opsForZSet().intersectAndStore("zset1", "zset2", "inter_zset");
		
		// 区间
		Range range = Range.range();
		range.lt("x8");// 小于
		range.gt("x1");// 大于
		set = redisTemplate.opsForZSet().rangeByLex("zset1", range);
		printSet(set);
		range.lte("x8");// 小于等于
		range.gte("x1");// 大于等于
		set = redisTemplate.opsForZSet().rangeByLex("zset1", range);
		printSet(set);
		
		// 限制返回个数
		Limit limit = Limit.limit();
		// 限制返回个数
		limit.count(4);
		// 限制从第五个开始截取
		limit.offset(5);
		// 求区间内的元素,并限制返回4条
		set = redisTemplate.opsForZSet().rangeByLex("zset1", range, limit);
		printSet(set);
		
		// 求排行,排名第1返回0,第2返回1
		Long rank = redisTemplate.opsForZSet().rank("zset1", "x4");
		System.err.println("rank = " + rank);
		
		// 删除元素,返回删除个数
		size = redisTemplate.opsForZSet().remove("zset1", "x5", "x6");
		System.err.println("delete = " + size);
		
		// 按照排行删除从0开始算起,这里将删除第排名第2和第3的元素
		size = redisTemplate.opsForZSet().removeRange("zset2", 1, 2);
		
		// 获取所有集合的元素和分数,以-1代表全部元素
		set = redisTemplate.opsForZSet().rangeWithScores("zset2", 0, -1);
		printTypedTuple(set);
		
		// 删除指定的元素
		size = redisTemplate.opsForZSet().remove("zset2", "y5", "y3");
		System.err.println(size);
		
		// 给集合中的一个元素的分数加上11
		Double dbl = redisTemplate.opsForZSet().incrementScore("zset1", "x1", 11);
		redisTemplate.opsForZSet().removeRangeByScore("zset1", 1, 2);
		set = redisTemplate.opsForZSet().reverseRangeWithScores("zset2", 1, 10);
		printTypedTuple(set);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值