笋岗网站建设,wordpress安装幻灯片,电子书网站模板,评论回复网站怎么做redis是最常用的缓存数据库#xff0c;常用于存储用户登录token、临时数据、定时相关数据等。redis是单线程的#xff0c;所以redis的操作是原子性的#xff0c;这样可以保证不会出现并发问题。redis基于内存#xff0c;速度非常快#xff0c;据测试#xff0c;redis读的…redis是最常用的缓存数据库常用于存储用户登录token、临时数据、定时相关数据等。redis是单线程的所以redis的操作是原子性的这样可以保证不会出现并发问题。redis基于内存速度非常快据测试redis读的速度是110000次/s,写的速度是81000次/s本节介绍SpringBoot引入redis以及使用RedisTemplate来操作redis数据。采用SpringBoot 2.1.9.RELEASE对应示例代码在https://github.com/laolunsi/spring-boot-examples一、A Simple Demo-使用SpringBoot连接redismaven:dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId
/dependencyyml:server:port: 8867
spring:redis:host: localhostport: 6379#password: database: 6测试类SpringBootTest
RunWith(SpringRunner.class)
public class RedisTest {Autowiredprivate RedisTemplate redisTemplate;Testpublic void testRedis() {String key hello;redisTemplate.opsForValue().set(hello, 你好);String res (String) redisTemplate.opsForValue().get(key);System.out.println(res);}
}执行结果看一下redis这里存在一个问题默认的存储方式导致key在redis-manager里面显示出来是乱码的并且存储结果是二进制了。这样不利用我们查看redis里面的数据。我们需要自定义redis存储的序列化规则。二、解决RedisTemplate默认序列化的问题完善一下maven:dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter/artifactId
/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope
/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId
/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId
/dependency定义RedisConfig类/*** redis配置* 主要是配置Redis的序列化规则替换默认的jdkSerializer* key的序列化规则用StringRedisSerializer* value的序列化规则用Jackson2JsonRedisSerializer*/
Configuration
public class RedisConfig {Beanpublic RedisTemplateObject, Object redisTemplate(RedisConnectionFactory connectionFactory) {RedisTemplateObject, Object redisTemplate new RedisTemplate();redisTemplate.setConnectionFactory(connectionFactory);// 使用Jackson2JsonRedisSerialize替换默认序列化Jackson2JsonRedisSerializer jackson2JsonRedisSerializer new Jackson2JsonRedisSerializer(Object.class);ObjectMapper objectMapper new ObjectMapper();objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);jackson2JsonRedisSerializer.setObjectMapper(objectMapper);// 设置key和value的序列化规则redisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);redisTemplate.setHashKeySerializer(new StringRedisSerializer());redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);redisTemplate.afterPropertiesSet();return redisTemplate;}
}删除之前的key重新执行一下test方法下面来演示一下SpringBoot使用RedisTemplate进行redis数据的操作三、基于SpringBoot的redis操作——key/list/hashRedisTemplate内置redis操作如下这里主要展示value/hash/list三种用法3.1 RedisTemplate.opsForValue Testpublic void testKeyOps() {// 测试redis操作key-value形式SetString keySet new HashSet();String key1 name;keySet.add(key1);// 存储简单的key-value并设置过期时间redisTemplate.opsForValue().set(key1, eknown, 1, TimeUnit.MINUTES);String key2 token:user1;String key3 token:user2;keySet.add(key2);keySet.add(key3);//redisTemplate.opsForValue().set(key2, {name:eknown}, role:admin);redisTemplate.opsForValue().set(key3, {name:test}, role:test);// 根据key的集合获取多个valueListString valueList redisTemplate.opsForValue().multiGet(keySet);for (String value : valueList) {System.out.println(value);}}执行结果redis中的数据redis中的key显示出了一个层级关系这个小技巧对于实际项目有个非常好的作用通过prefix:suffix这样的形式可以将redis中存储的数据分出层级。3.2 RedisTemplate.opsForHash清空该database下的数据测试redisTemplate.opsForHash Testpublic void testHashOps() {String key hash;// 单次往hash中存放一个数据redisTemplate.opsForHash().put(key, 1, 你好);MapString, Object map new HashMap();map.put(2, hello);map.put(3a, china12);// 一次性向hash中存放一个mapredisTemplate.opsForHash().putAll(key, map);// 获取hash下的所有key和valueMapString, Object resultMap redisTemplate.opsForHash().entries(key);for (String hashKey : resultMap.keySet()) {System.out.println(hashKey : resultMap.get(hashKey));}}执行结果redis:3.3 RedisTemplate.opsForList Testpublic void testListOps() {String listKey list;redisTemplate.opsForList().leftPush(listKey, first value); // 从list最左边插入数据redisTemplate.opsForList().leftPush(listKey, second value but left);redisTemplate.opsForList().rightPush(listKey, 3); // 从list最右边插入数据ListObject list new ArrayList();list.add(hello);list.add(http://www.eknown.cn);list.add(23344);list.add(false);redisTemplate.opsForList().rightPushAll(listKey, list); // 从list右边批量插入数据long size redisTemplate.opsForList().size(listKey);if (size 0) {for (int i 0; i size -1 ; i) {// 从list最左边开始读取list中的数据注意pop会导致出栈也就是数据被取出来了redis中就没有这个值了// 此处我们读取size-1条数据仅留下最后一条数据System.out.println(i : redisTemplate.opsForList().leftPop(listKey).toString());}}}执行上面的脚本注意在最后的读取list数据代码前面加一个断点此时redis中是这样的放开断点程序继续执行控制台如下注意此时redis中仅剩余最后一条数据这是由于pop的问题list中的数据被读取并删除了好了这一节主要讲了SpringBoot引入redis以及使用redis的一些基本操作和相关技巧在此基础上我们可以让我们的项目变得更加快速、灵活交流学习我的个人网站http://www.eknown.cnGit仓库地址https://github.com/laolunsi另外也欢迎大家关注我的公众号猿生物语一起学习Java/SpringBoot/SpringCloud技术。