关于redis客户端,我们经常习惯使用data-redis和jedis,今天我在这里重点介绍一下data-redis.
1.首先是导入相关依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
第一个依赖是redis客户端依赖,第二个是redis连接池的依赖,不用也没有关系
2.写配置文件指定连接地址和连接池配置
spring: redis: host: localhost port: 6379 database: 1 #数据库操作的对应下标 lettuce: pool: max-active: 20 #最大连接数,负值表示没有限制,默认8 max-wait: -1 #最大阻塞等待时间,负值表示没限制,默认-1 max-idle: 8 #最大空闲连接,默认8 min-idle: 0 #最小空闲连接,默认0
3.注入redisTemplate,我一般是使用StringRedisTemplate,它采用的是json的序列化方式,比较省传输空间,效率也比较好
@Autowired
private StringRedisTemplate redisTemplate;
4。展示常用的方法
@Test
void setRedisTemplate() {
redisTemplate.hasKey("");
redisTemplate.delete("");
redisTemplate.dump("fsd");
redisTemplate.expire("num",3434,TimeUnit.SECONDS);
Date date = new Date("2023/8/28 14:34:34");
redisTemplate.expireAt("num", date);
redisTemplate.rename("num","fasd");
redisTemplate.randomKey();
redisTemplate.getExpire("num");
redisTemplate.move("num",2);
}
@Test
void string() {
redisTemplate.opsForValue().set("key", "value"); //设置当前的key以及value值
redisTemplate.opsForValue().set("key", "value", 1);//用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始
redisTemplate.opsForValue().set("key", "value", 1000, TimeUnit.SECONDS); //设置当前的key以及value值并且设置过期时间
redisTemplate.opsForValue().setBit("key", 1, true); //将二进制第offset位值变为value
redisTemplate.opsForValue().setIfAbsent("key", "value");//重新设置key对应的值,如果存在返回false,否则返回true
redisTemplate.opsForValue().get("key", 0, -1); //返回key中字符串的子字符
redisTemplate.opsForValue().getAndSet("key", "value"); //将旧的key设置为value,并且返回旧的key
ArrayList<String> strings = new ArrayList<>();
strings.add("1");
strings.add("2");
redisTemplate.opsForValue().multiGet(strings); //批量获取值
redisTemplate.opsForValue().size("key"); //获取字符串的长度
redisTemplate.opsForValue().append("key", "value"); //在原有的值基础上新增字符串到末尾
redisTemplate.opsForValue().increment("key",2.20);//以增量的方式将double值存储在变量中
redisTemplate.opsForValue().increment("key",11); //通过increment(K key, long delta)方法以增量方式存储long值(正值则自增,负值则自减)
Map valueMap = new HashMap();
valueMap.put("valueMap1","map1");
valueMap.put("valueMap2","map2");
valueMap.put("valueMap3","map3");
redisTemplate.opsForValue().multiSetIfAbsent(valueMap); //如果对应的map集合名称不存在,则添加否则不做修改
redisTemplate.opsForValue().multiSet(valueMap); //设置map集合到redis
}
@Test
void list() {
redisTemplate.opsForList().index("sh", 1); //通过索引获取列表中的元素
redisTemplate.opsForList().range("key", 1, -1); //获取列表指定范围内的元素(start开始位置, 0是开始位置,end 结束位置, -1返回所有)
redisTemplate.opsForList().leftPush("key", "value"); //存储在list的头部,即添加一个就把它放在最前面的索引处
redisTemplate.opsForList().leftPush("key", "less", "value"); //如果pivot处值存在则在pivot前面添加
redisTemplate.opsForList().leftPushAll("key", "value"); //把多个值存入List中(value可以是多个值,也可以是一个Collection value)
redisTemplate.opsForList().leftPushIfPresent("key", "value"); //List存在的时候再加入
redisTemplate.opsForList().rightPush("key", "value"); //按照先进先出的顺序来添加(value可以是多个值,或者是Collection var2)
redisTemplate.opsForList().rightPushAll("key", "value"); //在pivot元素的右边添加值
redisTemplate.opsForList().set("key", 1, "value"); //设置指定索引处元素的值
redisTemplate.opsForList().trim("key", 1, -1); //将List列表进行剪裁
redisTemplate.opsForList().size("key"); //获取当前key的List列表长度
//移除并获取列表中第一个元素(如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止)
redisTemplate.opsForList().leftPop("key");
redisTemplate.opsForList().leftPop("key", 1110, TimeUnit.SECONDS);
//移除并获取列表最后一个元素
redisTemplate.opsForList().rightPop("key");
redisTemplate.opsForList().rightPop("key", 100, TimeUnit.SECONDS);
//从一个队列的右边弹出一个元素并将这个元素放入另一个指定队列的最左边
redisTemplate.opsForList().rightPopAndLeftPush("sourceKey", "destinationKey");
redisTemplate.opsForList().rightPopAndLeftPush("sourceKey", "destinationKey", 1, TimeUnit.SECONDS);
//删除集合中值等于value的元素(index=0, 删除所有值等于value的元素; index>0, 从头部开始删除第一个值等于value的元素; index<0, 从尾部开始删除第一个值等于value的元素)
redisTemplate.opsForList().remove("key", 1, "value");
}
@Test
void hashmap() {
redisTemplate.opsForHash().get("key", "field"); //获取变量中的指定map键是否有值,如果存在该map键则获取值,没有则返回null
redisTemplate.opsForHash().entries("key"); //获取变量中的键值对
redisTemplate.opsForHash().put("key", "hashKey", "value"); //新增hashMap值
HashMap<Object, Object> map = new HashMap<>();
redisTemplate.opsForHash().putAll("key", map); //以map集合的形式添加键值对
redisTemplate.opsForHash().putIfAbsent("key", "hashKey", "value"); //仅当hashKey不存在时才设置
redisTemplate.opsForHash().delete("key", "fields"); //删除一个或者多个hash表字段
redisTemplate.opsForHash().hasKey("key", "field"); //查看hash表中指定字段是否存在
redisTemplate.opsForHash().increment("key", "field", 11); //给哈希表key中的指定字段的整数值加上增量increment
redisTemplate.opsForHash().increment("key", "field", 11); //给哈希表key中的指定字段的整数值加上增量increment
redisTemplate.opsForHash().keys("key"); //获取所有hash表中字段
redisTemplate.opsForHash().values("key"); //获取hash表中存在的所有的值
redisTemplate.opsForHash().scan("key", ScanOptions.NONE); //匹配获取键值对,ScanOptions.NONE为获取全部键对
}
@Test
void sort() {
redisTemplate.opsForSet().add("key", "values"); //添加元素
redisTemplate.opsForSet().remove("key", "values"); //移除元素(单个值、多个值)
redisTemplate.opsForSet().pop("key"); //删除并且返回一个随机的元素
redisTemplate.opsForSet().size("key"); //获取集合的大小
redisTemplate.opsForSet().isMember("key", "value"); //判断集合是否包含value
redisTemplate.opsForSet().intersect("key", "otherKey"); //获取两个集合的交集(key对应的无序集合与otherKey对应的无序集合求交集)
redisTemplate.opsForSet().intersect("key", "otherKeys");//获取多个集合的交集(Collection var2)
redisTemplate.opsForSet().intersectAndStore("key", "otherKey", "destKey"); //key集合与otherKey集合的交集存储到destKey集合中(其中otherKey可以为单个值或者集合)
redisTemplate.opsForSet().intersectAndStore("key", "otherKeys", "destKey"); //key集合与多个集合的交集存储到destKey无序集合中
redisTemplate.opsForSet().union("key", "otherKeys"); //获取两个或者多个集合的并集(otherKeys可以为单个值或者是集合)
redisTemplate.opsForSet().unionAndStore("key", "otherKey", "destKey"); //key集合与otherKey集合的并集存储到destKey中(otherKeys可以为单个值或者是集合)
redisTemplate.opsForSet().difference("key", "otherKeys"); //获取两个或者多个集合的差集(otherKeys可以为单个值或者是集合)
redisTemplate.opsForSet().differenceAndStore("key", "otherKey", "destKey"); //差集存储到destKey中(otherKeys可以为单个值或者集合)
redisTemplate.opsForSet().randomMember("key"); //随机获取集合中的一个元素
redisTemplate.opsForSet().members("key"); //获取集合中的所有元素
redisTemplate.opsForSet().randomMembers("key", 2); //随机获取集合中count个元素
redisTemplate.opsForSet().distinctRandomMembers("key", 1); //获取多个key无序集合中的元素(去重),count表示个数
redisTemplate.opsForSet().scan("key", ScanOptions.NONE); //遍历set类似于Interator(ScanOptions.NONE为显示所有的)
}
@Test
void zSort() {
redisTemplate.opsForZSet().add("key", "value", 1); //添加元素(有序集合是按照元素的score值由小到大进行排列)
redisTemplate.opsForZSet().remove("key", "values"); //删除对应的value,value可以为多个值
redisTemplate.opsForZSet().incrementScore("key", "value", 2); //增加元素的score值,并返回增加后的值
redisTemplate.opsForZSet().rank("key", "value"); //返回元素在集合的排名,有序集合是按照元素的score值由小到大排列
redisTemplate.opsForZSet().reverseRank("key", "value"); //返回元素在集合的排名,按元素的score值由大到小排列
redisTemplate.opsForZSet().reverseRangeWithScores("key", 1,-1); //获取集合中给定区间的元素(start 开始位置,end 结束位置, -1查询所有)
redisTemplate.opsForZSet().reverseRangeByScore("key", 1, 10); //按照Score值查询集合中的元素,结果从小到大排序
redisTemplate.opsForZSet().reverseRangeByScoreWithScores("key", 1, 10); //返回值为:Set<ZSetOperations.TypedTuple<V>>
redisTemplate.opsForZSet().count("key", 1, 10); //根据score值获取集合元素数量
redisTemplate.opsForZSet().size("10"); //获取集合的大小
redisTemplate.opsForZSet().zCard("key"); //获取集合的大小
redisTemplate.opsForZSet().score("key", "value"); //获取集合中key、value元素对应的score值
redisTemplate.opsForZSet().removeRange("key", 1, 10); //移除指定索引位置处的成员
redisTemplate.opsForZSet().removeRangeByScore("key", 1, 10); //移除指定score范围的集合成员
redisTemplate.opsForZSet().unionAndStore("key", "otherKey", "destKey");//获取key和otherKey的并集并存储在destKey中(其中otherKeys可以为单个字符串或者字符串集合)
redisTemplate.opsForZSet().intersectAndStore("key", "otherKey", "destKey"); //获取key和otherKey的交集并存储在destKey中(其中otherKeys可以为单个字符串或者字符串集合)
}