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序列化,得到的效果就是这种二进制之类的形式。

这种方式的缺点就是:
可读性差、内存占用较大

那有没有优化方式呢,肯定是有的,下一篇我们讲一下优化方案

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐