redis超详细篇3 三种连接使用方式
redis最终还是要运用到项目实战中的,我们以最常规的java开发语言为例分类redis在java中引用大致可以分三种1.jedis直连2.jedis连接池3.spring data redis集成连接其中运用最多的还是第三种,比较简单方便。下面一一讲解下每一种的连接方式连接方式jedis直连引入依赖<dependency><groupId>redis.clients<
redis最终还是要运用到项目实战中的,我们以最常规的java开发语言为例
分类
redis在java中引用大致可以分三种
1.jedis直连
2.jedis连接池
3.spring data redis集成连接
其中运用最多的还是第三种,比较简单方便。下面一一讲解下每一种的连接方式
连接方式
jedis直连
引入依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.7.1</version>
</dependency>
创建连接
需要引入Jedis,在使用前我们需要建立连接,Jedis方法中有设置库连接的方式,对着写就可以了
private Jedis jedis;
@BeforeEach
void setUp() {
//建立连接
jedis = new Jedis("192.168.1.10", 6379);
//设置密码
jedis.auth("123456");
//选择库
jedis.select(0);
}
@AfterEach
void testDown() {
if (jedis != null)
jedis.close();
}
测试代码及效果
@Test
void testString() {
String set = jedis.set("biName", "五音不全的小狗");
System.out.println(set);
String biName = jedis.get("biName");
System.out.println(biName);
}
@Test
void testHash() {
//插入hash数据
jedis.hset("hashName", "name", "小熊");
jedis.hset("hashName", "age", "23岁");
//获取hash数据
Map<String, String> hashName = jedis.hgetAll("hashName");
System.out.println(hashName);
}
运行结果
性能分析
由于jedis本身是不安全的,频繁的创建和销毁有性能损耗,我们推荐使用jedis连接池代替直连方式
jedis连接池
jedis连接池的话,我们就得手动写代码,一般连接池代码网上都有模板,
连接池中,我们可以设置最多创建多少链接,最小空闲连接,以及等待时常等
创建
private static final JedisPool jedisPool;
static {
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(8); //最多允许创建多少个连接
poolConfig.setMaxIdle(0); //最大空闲连接
poolConfig.setMinIdle(0);
poolConfig.setMaxWaitMillis(1000);
jedisPool = new JedisPool(poolConfig,
"192.168.1.10",
6379,
1000,
"1233456");
}
public static Jedis getJedis(){
return jedisPool.getResource();
}
测试及效果
我们这里连接redis库就是另一种方式了,由原来的jedis = new Jedis()换成了
jedis = JedisConnectionFactory.getJedis();
@BeforeEach
void setUp2() {
//建立连接
jedis = JedisConnectionFactory.getJedis();
//选择库
jedis.select(0);
}
@Test
void testString() {
String set = jedis.set("biName2", "五音不全的小狗");
System.out.println(set);
String biName = jedis.get("biName2");
System.out.println(biName);
}
@Test
void testHash() {
//插入hash数据
jedis.hset("hashName2", "name", "小熊");
jedis.hset("hashName2", "age", "23岁");
//获取hash数据
Map<String, String> hashName = jedis.hgetAll("hashName");
System.out.println(hashName);
}
@AfterEach
void testDown() {
if (jedis != null)
jedis.close();
}
效果:
redis连接池可以解决频繁的创建和销毁,解决内存消耗等问题,但是在分布式等运用中,这种方式还有有点不可取,为了更高效的使用redis,我们推荐使用Spring Date redis
Spring Data redis
官网地址:https://spring.io/projects/spring-data-redis
springDataRedis的作用:
1.提供了对不通redis客户端的整合
2.提供了redistemplate统一API来操作redis
3.支持redis的发部订阅模型、支持哨兵和redis集群
。。。。
springDateRedis入门
springboot已经提供了对SpringDataRedis的支持
引入依赖
一般这两个依赖搭配使用
<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>
yml配置
yml中配置redis库的连接,以及最大连接数
这里特别注意:springdataRedis模式是lettuce的配置,如果想要换成jedis的配置,需要引入jedis的依赖库
spring:
redis:
host: 192.168.1.180
port: 6379
password: 123456
lettuce:
pool:
max-active: 8
min-idle: 0
max-wait: 100ms
用法
springDataRedis中提供了Redistemplate工具类,其中疯子爽了各种对Redis的操作,并且对不同的数据类型操作API封装到不同的类型中
我们就以String类型为例,来演示下
第一步:注入RedisTemplate
@Autowired
private RedisTemplate redisTemplate;
第二步:测试
@Test
void testString() {
//写入一条string数据
redisTemplate.opsForValue().set("name", "小仙女");
Object name = redisTemplate.opsForValue().get("name");
System.out.println(name);
}
测试效果:
我们看到取值正常,数据也插入到库中了,但是有个很明显的问题,数据显示和我们预想的有区别;
原因:redis把接收到的值序列化成字节形式,默认是采用JDK序列化,得到的效果就是这种二进制之类的形式。
这种方式的缺点就是:
可读性差、内存占用较大
那有没有优化方式呢,肯定是有的,下一篇我们讲一下优化方案
更多推荐
所有评论(0)