默认有三种方式连接redis.
第一种:jedis---传统的项目--ssm
第二种:lettuce:---->刚出现没有多久就被springboot整合进来。
第三种:springboot连接redis
1.jedis
(1)引入依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>4.3.1</version>
</dependency>
(2)编写相关的代码
public void test01(){ Jedis jedis = new Jedis("192.168.61.200", 6379); Set<String> keys = jedis.keys("*"); jedis.set("k1","v1"); jedis.set("k2","v2"); jedis.setex("k3",60,"v3"); HashMap<String, String> map = new HashMap<>(); map.put("name","刘民证"); map.put("age","38"); map.put("sex","女"); jedis.hset("k4",map); Map<String, String> k4 = jedis.hgetAll("k4"); System.out.println(keys); System.out.println(k4); jedis.close(); }
每次使用jedis对象时 都需要自己创建,当使用完后,需要关闭该对象
2.jedis连接池的使用
public void test02(){ JedisPoolConfig config = new JedisPoolConfig();//连接池配置 config.setMaxTotal(10);//总条数 config.setMaxIdle(10); config.setMinIdle(2);//最小空闲连接 config.setTestOnBorrow(true); //测试连通性 JedisPool jedisPool = new JedisPool(config,"192.168.61.200",6379);//连接池 Jedis jedis = jedisPool.getResource();//获取链接 jedis.flushDB();//清库 jedis.set("k1","v1"); String k1 = jedis.get("k1"); System.out.println(k1); jedis.close();//归还连接 }
3.springboot整合redis
springboot在整合redis时提高两个模板类,StringRedisTemplate和RedisTemplate.以后对redis的操作都在该模板类中。StringRedisTemplate是RedisTemplate的子类。
(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>
(2)修改配置文件
使用StringRedisTemplate(数据类型都是String)
使用RedisTemplate
它是StringRedisTemplate的父类,它类可以存储任意数据类型,但是任意类型必须序列化,默认采用的是jdk的序列化方式。jdk序列化方式阅读能力差,而且占用空间大. 我们在使用是一般需要人为指定序列化方式。
如果每次使用都人为指定序列化方式,统一设置redisTemplate的序列化
@Bean //该方法的返回对象交于spring容器管理 public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) { RedisTemplate<String, Object> template = new RedisTemplate<>(); RedisSerializer<String> redisSerializer = new StringRedisSerializer(); Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(om); template.setConnectionFactory(factory); //key序列化方式 template.setKeySerializer(redisSerializer); //value序列化 template.setValueSerializer(jackson2JsonRedisSerializer); //key hashmap序列化 template.setHashKeySerializer(jackson2JsonRedisSerializer); //value hashmap序列化 template.setHashValueSerializer(jackson2JsonRedisSerializer); return template; }
上面的连接都是连接的单机版的redis,真实项目它们的redis都是集群模式
redis的应用场景
redis可以作为缓存
(1) 缓存的原理
(2)缓存的作用:
减少访问数据库的频率。--提高系统的性能。
(3)什么样的数据适合放入缓存
1.查询频率高的
2.修改频率低的
3.数据安全性要求低的。
(4)如何使用缓存