微服务SpringBoot集成Redis开始使⽤操作String、List、hash、Zs。。。微服务SpringBoot集成Redis
废话不多说,直接快速⼊门
1.导⼊jar包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2.在l中配置redis
spring:
redis:
host: 106.14.171.136
port:6379
3.Redis中能够存储的类型:
结构
类型
结构存储的值结构的读写能⼒
String可以是字符串,正数,或者浮点数对整个字符串或者字符串的其中⼀部分执⾏操作;对象和浮点数执⾏⾃增或者⾃减
List⼀个链表,链表上的每个节点都包含了⼀个字符串从列表的两端推⼊或者弹出;根据偏移量对链表进⾏修剪,读取单个或者多个元素,根
据值来查或者移除元素
Hash包含键值对的⽆序散列表添加,获取,移除,单个元素对,获取所有键值对
Set 包含字符串的⽆序收集器,并且被包含的每个字符串都
是独⼀⽆⼆的,宁各不相同
添加、获取、移除单个元素;检查⼀个元素或多个元素是否存在某个集合中;计算交
集、并集、差集;从集合元素⾥随机获取元素
Zset 字符串成员与浮点数分值之间的有序映射,元素的排列
顺序由分值的⼤⼩决定
添加、获取、删除单个元素;根据分值范围或者成员来获取元素
RedisTemplate redisTemplate.opsForValue();//操作字符串
RedisTemplate redisTemplate.opsForHash();//操作hash
RedisTemplate redisTemplate.opsForList();//操作list
RedisTemplate redisTemplate.opsForSet();//操作set
RedisTemplate redisTemplate.opsForZSet();//操作有序set
spring-data-redis给了5个⽅法,有时候不同公司,还会做不同封装,在课程中所给的CacheService⼯具类中
是对spring-data-redis⽅法的进⼀步封装,⽬的是为了操作起来更加⽅便。
知识⼩贴⼠:在CacheService⼯具类中使⽤的是StringRedisTemplate,他和RedisTemplate有什么区别?
1:StringRedisTemplate继承RedisTemplate
2:两者的数据是不共通的;也就是说StringRedisTemplate只能管理StringRedisTemplate⾥⾯的数据, RedisTemplate只能管理RedisTemplate中的数据。
3:StringRedisTemplate默认采⽤的是String的序列化策略,保存的key和value都是采⽤此策略序列化保存的, RedisTemplate默认采⽤的是JDK的序列化策略,保存的key和value都是采⽤此策略序列化保存的。
当你的redis数据库⾥⾯本来存的是字符串数据或者你要存取的数据就是字符串类型数据的时候,那么你就使⽤ StringRedisTemplate即可,但是如果你的数据是复杂的对象类型,⽽取出的时候⼜不想做任何的数据转换,直接从 Redis⾥⾯取出⼀个对象,那么使⽤RedisTemplate是更好的选择。
4.操作String结构类型
1.普通插⼊和得到
⾸先先注⼊StringRedisTemplate和RedisTemplate
@Autowired
RedisTemplate redisTemplate;
@Autowired
StringRedisTemplate stringRedisTemplate;
下⾯我给出StringRedisTemplate和RedisTemplate这两种存储的区别:
RedisTemplate:
// 添加
RedisTemplate.opsForValue().set("xiaobai","xiaobai");
/
/ 查
String value =(String) RedisTemplate.opsForValue().get("xiaobai");
// 删除
RedisTemplate.delete("xiaobai");
StringRedisTemplate:
// 添加
stringRedisTemplate.opsForValue().set("xiaobai","xiaobai");
// 查
String value =(String) stringRedisTemplate.opsForValue().get("xiaobai");
// 删除
stringRedisTemplate.delete("xiaobai");
由此可以看出StringRedisTemplate和RedisTemplate的区别,所以当你存储的是String类型的话,就⽤StringRedisTemplate⽐较好。
2.添加⾃动失效时间
/**
* 参数:
* 1.key
* 2.value
* 3.存储时间值
* 4.存储时间的单位
*/
stringRedisTemplate.opsForValue().set("xiaobai2","xiaobai",10, TimeUnit.HOURS);
5.操作List结构类型
1.插⼊数据
1.⼀次插⼊⼀个value
* 这是从list数据结构左边插⼊
*/
stringRedisTemplate.opsForList().leftPush("英雄","张飞");
stringRedisTemplate.opsForList().leftPush("英雄","关⽻");
stringRedisTemplate.opsForList().leftPush("英雄","刘备");
/**
* 这是从list数据结构右边插⼊
*/
stringRedisTemplate.opsForList().rightPush("英雄","曹操");
stringRedisTemplate.opsForList().rightPush("英雄","许褚");
stringRedisTemplate.opsForList().rightPush("英雄","郭嘉");
/*
这样的插⼊的顺序应该是:刘备、关⽻、张飞、曹操、许褚、郭嘉 */
2.⼀次插⼊多个值
根据集合集体插⼊
// 可以根据集合集体右边插⼊
List<String> list =new ArrayList<>();
list.add("马超");
list.add("诸葛亮");
list.add("赵云");
微服务在哪里stringRedisTemplate.opsForList().rightPushAll("英雄",list);
// 可以根据集合集体左边插⼊
List<String> list =new ArrayList<>();
list.add("马超");
list.add("诸葛亮");
list.add("赵云");
stringRedisTemplate.opsForList().leftPushAll("英雄",list);
可以⼀次性插⼊数据
可以传多个值,左边插⼊,这样就可以直接插⼊进去了
*/
stringRedisTemplate.opsForList().leftPushAll("英雄","诸葛亮","马超","赵云");
// 从右边插⼊这个就不演⽰了,有兴趣的⼩伙伴可以去演⽰
stringRedisTemplate.opsForList().rightPushAll("英雄","诸葛亮","马超","赵云");
2.取出数据
// 从右边取出⼀个值,取出的值将会载redis中删除
String s = stringRedisTemplate.opsForList().rightPop("英雄");
// 从左边边取出⼀个值,取出的值将会载redis中删除
String s1 = stringRedisTemplate.opsForList().leftPop("英雄");
注意:这是取出数据,当你取出数据后,数据也会在redis List 集合中被移除。
6.操作hash结构数据类型
1.插⼊数据
/**
* 参数:
* 第⼀个:hash key
* 第⼆个:key
* 第三个:value
*/
stringRedisTemplate.opsForHash().put("myHash","英雄","诸葛亮");
// 可以设置⼀个map进去存储信息
Map<String,Object> map =new HashMap<>();
map.put("英雄","凤雏");
map.put("英雄1","曹操");
map.put("英雄2","马超");
stringRedisTemplate.opsForHash().putAll("myHashMap",map);
2.取出数据
获得数据根据hash和key获得值,在redis中不会移除得到的数据
String o =(String) stringRedisTemplate.opsForHash().get("myHashMap","英雄");
System.out.println(o);
根据hash和key删除数据
Long myHashMap = stringRedisTemplate.opsForHash().delete("myHashMap","英雄");
System.out.println(myHashMap);
通过hash值查询数据并把数据封装到map中
Map<Object, Object> map = stringRedisTemplate.opsForHash().entries("myHashMap");
System.out.println(map);
根据Hash和key 判断是否存在此值,如果有则返回true,否者返回flash
Boolean aBoolean = stringRedisTemplate.opsForHash().hasKey("myHashMap","英雄1");
System.out.println(aBoolean);
查到所有的key 封装到set集合中
Set<Object> set = stringRedisTemplate.opsForHash().keys("myHashMap");
System.out.println(set);
7.Zset数据结构
Zest集合是可以排序的,根据分数排序,所以当你添加元素,可以添加他的分数,分数可以试⽤当前时间的毫秒值。
我把所有的Zset集合需要的
/**
* 添加元素,有序集合是按照元素的score值由⼩到⼤排列
*
* @param key
* @param value
* @param score
* @return
*/
public Boolean zAdd(String key, String value,double score){
return stringRedisTemplate.opsForZSet().add(key, value, score);
}
/**
*
* @param key
* @param values
* @return
*/
public Long zAdd(String key, Set<TypedTuple<String>> values){
return stringRedisTemplate.opsForZSet().add(key, values);
}
/**
*
* @param key
* @param values
* @return
*/
public Long zRemove(String key, values){
return stringRedisTemplate.opsForZSet().remove(key, values);
}
public Long zRemove(String key, Collection<String> values){
if(values!=null&&!values.isEmpty()){
Object[] objs = Array(new Object[values.size()]);
return stringRedisTemplate.opsForZSet().remove(key, objs);
}
return0L;
}
/**
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论