第二章:Redis在项目中的使用

本文详细介绍如何使用Jedis客户端操作Redis服务端,包括直接构造单个Jedis实例、构建连接池、分片式集群Redis的使用,以及在项目中优化Redis操作的方法。通过示例代码展示了数据的存取、设置生存时间等常见操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

redie是服务端,需要jedis客户端进行操作

导入依赖

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

一 构建代码案例

1 直接构造单个的jedis

String name = "大人";
        String nn = "xiao";
        //构造jedis对象
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        //向redis里面添加数据
//        jedis.set("222","生存时间只有5秒");
        jedis.strlen("myname1");
        jedis.mset("1,2","11,22");
//        jedis.expire("222",5);
        //从redis中读取数据
        String value = jedis.get("222");
        System.out.println("设置了时间的:"+value);
        System.out.println("剩余生存时间:"+jedis.ttl("myname1"));
        //关闭连接
        jedis.close();

 

2 构建连接池

//构建连接池配置信息
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
//设置最大连接数
jedisPoolConfig.setMaxTotal(50);
//构建连接池
JedisPool jedisPool = new JedisPool("127.0.0.1",6379);
//从连接池中获取连接
Jedis jedis = jedisPool.getResource();
//读取数据
System.out.println("我是新的数据"+jedis.get("xx"));
//还回连接池
jedisPool.returnResource(jedis);
//释放连接池
jedis.close();

3 分片式集群redis

//构建连接池配置
JedisPoolConfig poolConfig = new JedisPoolConfig();
//设置最大连接数
poolConfig.setMaxTotal(50);
//定义集群信息
List<JedisShardInfo> shard = new ArrayList<JedisShardInfo>();
shard.add(new JedisShardInfo("127.0.0.1",6379));
shard.add(new JedisShardInfo("192.168.3.112",6378));

//定义集群连接池
ShardedJedisPool shardedJedisPool = new ShardedJedisPool(poolConfig,shard);
ShardedJedis shardedJedis = null;
try {
    //从集群中获取分片数据
    shardedJedis = shardedJedisPool.getResource();

    //从redis中取数据
    String value = shardedJedis.get("mytest");
    System.out.println(value);
} catch (Exception e) {
    e.printStackTrace();
} finally {
    if (shardedJedis != null){
        //关闭,检测链接是否有效,有效则放回连接池中,无效则重置状态
        shardedJedis.close();
    }
}
//关闭连接池
shardedJedisPool.close();

 

二 redis在项目中的使用

    1 将分片式集群连接池配置到项目的配置文件中

    配置文件中是将"分片式集群redis"里面的代码转成了配置文件

ce6098038557b9c4abe31ee7d5edfcd912c.jpg

    2 写通用工具类redisService类

   b81e41bea6950e80e79c312b113a40c168a.jpg

b3767302d8089c067f6e380c50fbfa115b9.jpg

 

2 优化后的redisService

e1392b2794e68ad337e9540498c5128f6ef.jpg

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;

@Service
public class RedisService {

    @Autowired
    private ShardedJedisPool shardedJedisPool;

    private <T> T execute(Function<T, ShardedJedis> fun) {
        ShardedJedis shardedJedis = null;
        try {
            // 从连接池中获取到jedis分片对象
            shardedJedis = shardedJedisPool.getResource();
            return fun.callback(shardedJedis);
        } finally {
            if (null != shardedJedis) {
                // 关闭,检测连接是否有效,有效则放回到连接池中,无效则重置状态
                shardedJedis.close();
            }
        }
    }

    /**
     * 执行set操作
     * 
     * @param key
     * @param value
     * @return
     */
    public String set(final String key, final String value) {
        return this.execute(new Function<String, ShardedJedis>() {
            @Override
            public String callback(ShardedJedis e) {
                return e.set(key, value);
            }
        });
    }

    /**
     * 执行get操作
     * 
     * @param key
     * @return
     */
    public String get(final String key) {
        return this.execute(new Function<String, ShardedJedis>() {
            @Override
            public String callback(ShardedJedis e) {
                return e.get(key);
            }
        });
    }

    /**
     * 执行删除操作
     * 
     * @param key
     * @return
     */
    public Long del(final String key) {
        return this.execute(new Function<Long, ShardedJedis>() {
            @Override
            public Long callback(ShardedJedis e) {
                return e.del(key);
            }
        });
    }

    /**
     * 设置生存时间,单位为:秒
     * 
     * @param key
     * @param seconds
     * @return
     */
    public Long expire(final String key, final Integer seconds) {
        return this.execute(new Function<Long, ShardedJedis>() {
            @Override
            public Long callback(ShardedJedis e) {
                return e.expire(key, seconds);
            }
        });
    }

    /**
     * 执行set操作并且设置生存时间,单位为:秒
     * 
     * @param key
     * @param value
     * @return
     */
    public String set(final String key, final String value, final Integer seconds) {
        return this.execute(new Function<String, ShardedJedis>() {
            @Override
            public String callback(ShardedJedis e) {
                String str = e.set(key, value);
                e.expire(key, seconds);
                return str;
            }
        });
    }
}

 

 

redis操作的是字符串类型,所以在使用的时候要用到对对象的序列化

ObjectMapper的序列化使用

转载于:https://my.oschina.net/redpotato/blog/3061102

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值