Redis学习记录:Java客户端

1.开启远程连接

Redis默认不支持远程连接,需要手动开启
修改配置文件 redis.conf

  1. 注释bind:127.0.0.1
  2. 启用密码校验,注释掉requirepass
    修改完保存,然后使用配置文件启动redis

2.Jedis

创建Maven项目,pom文件里引入Jedis依赖

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>5.0.0</version>
</dependency>

创建一个测试方法:

public static void main(String[] args) {
        //构造一个Jedis对象
        Jedis jedis = new Jedis("127.0.0.1",6379);
        //校验密码
        jedis.auth("qiongmei");
        //测试是否连接成功,s返回控制台为pong
        String s = jedis.ping();
        System.out.println(s);
    }

Jedis封装的API方法与Redis命令高度重合,直接使用即可。

2.2 Jedis连接池

Jedis对象本身线程不安全,一般通过连接池获取

    public static void main(String[] args) {
        Jedis jedis = null;
        //构造一个Jedis连接池
        JedisPool jedisPool = new JedisPool("127.0.0.1", 6379);
        //连接池中获取一个Jedis连接
        jedis = jedisPool.getResource();
        jedis.auth("qiongmei");
        try {
            //操作数据库
            String ping = jedis.ping();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //使用完毕后关闭连接
            if (jedis != null)
                jedis.close();
        }
    }

利用try-with-resource改进一下

    public static void main(String[] args) {
        JedisPool jedisPool = new JedisPool("127.0.0.1",6379);
        try(Jedis jedis = jedisPool.getResource()) {
            jedis.auth("qiongmei");
            //操作数据库
            String ping = jedis.ping();
        }
    }

继续改进可以封装成接口,通过调用实现类来操作。

//接口
public interface CallWithJedis {
    void call(Jedis jedis);
}
//实现类
public class Redis {
    private JedisPool pool;

    public Redis() {
    	//连接池的配置,可以自己设置
        GenericObjectPoolConfig config=new GenericObjectPoolConfig();
        pool = new JedisPool(config,"127.0.0.1",6379,30000,"qiongmei");
    }

    public void excute(CallWithJedis callWithJedis) {
        try (Jedis jedis = pool.getResource()) {
            callWithJedis.call(jedis);
        }
    }
}
//调用方法
    public static void main(String[] args) {
        Redis redis = new Redis();
        redis.excute(jedis -> {
            String ping = jedis.ping();
            System.out.println(ping);
        });
    }

3.Lettuce

Lettuce和Jedis比较:

  1. Jedis在实现过程中直接连接Redis,在多个线程中共享一个Jedis实例,线程不安全。多线程场景下使用连接池,每个线程获取自己的Jedis实例(消耗较多资源)
  2. Lettuce 基于Netty NIO 框架,克服了Jedis中线程不安全问题。Lettuce支持同步,异步,响应式调用,多个线程可以共享一个实例。

引入依赖

<dependency>
    <groupId>io.lettuce</groupId>
    <artifactId>lettuce-core</artifactId>
    <version>6.2.5.RELEASE</version>
</dependency>

简单的测试类

  public static void main(String[] args) {
        //密码写在连接里
        RedisClient redisClient = RedisClient.create("redis://qiongmei@127.0.0.1");
        StatefulRedisConnection<String, String> connect = redisClient.connect();
        RedisCommands<String, String> sync = connect.sync();
        sync.set("name","neko");
        String name = sync.get("name");
        System.out.println("name = " + name);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值