您的位置:首页 > 理论基础 > 数据结构算法

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

2019-07-04 13:24 1091 查看

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]

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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: