【nosql-redis】java直接操作redis

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qiaziliping/article/details/80990174

redis入门,百度网盘
链接: https://pan.baidu.com/s/11onVTGqf7uyCGxkoQOxdTw 密码: csef

1 redis.properties

直接配置在classpath下面

#*****************jedis连接参数设置*********************#  

#redis服务器ip #     
#测试环境  
#redis.ip=192.168.87.211
#正式环境
redis.ip=139.198.126.229
#redis服务器端口号#    

redis.port=6479
#redis 测试密码 password
#redis.password=hesvit*0522
#线上redies密码
redis.password=hesvit
#************************jedis池参数设置*******************#    

#jedis的最大分配对象#    

jedis.pool.maxActive=300

#jedis最大保存idel状态对象数 #    

jedis.pool.maxIdle=1000

#jedis池没有对象返回时,最大等待时间 #    

jedis.pool.maxWait=1500

#jedis调用borrowObject方法时,是否进行有效检查#    

jedis.pool.testOnBorrow=true 

#jedis调用returnObject方法时,是否进行有效检查 #    

jedis.pool.testOnReturn=true

2 RedisPool.java

package com.hesvit.common.util;

import java.io.IOException;
import java.util.Properties;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

public class MyJedisPool {
    private static Logger logger = LoggerFactory.getLogger(MyJedisPool.class);

    private static JedisPool pool;

    // 静态代码初始化池配置
    static {
        try {

            Properties props = new Properties();

            props.load(MyJedisPool.class.getClassLoader().getResourceAsStream("redis.properties"));

            // 创建jedis池配置实例

            JedisPoolConfig config = new JedisPoolConfig();

            // 设置池配置项值

            // config.setMaxActive(Integer.valueOf(props.getProperty("jedis.pool.maxActive")));

            /*
             * config.setMaxIdle(Integer.valueOf(props.getProperty(
             * "jedis.pool.maxIdle")));
             * 
             * config.setMaxWaitMillis(Long.valueOf(props.getProperty(
             * "jedis.pool.maxWait")));
             * 
             * config.setTestOnBorrow(Boolean.valueOf(props.getProperty(
             * "jedis.pool.testOnBorrow")));
             * 
             * config.setTestOnReturn(Boolean.valueOf(props.getProperty(
             * "jedis.pool.testOnReturn")));
             */

            config.setMaxTotal(200);
            config.setMaxIdle(50);
            config.setMinIdle(8);// 设置最小空闲数
            config.setMaxWaitMillis(10000);
            config.setTestOnBorrow(true);
            config.setTestOnReturn(true);
            // Idle时进行连接扫描
            config.setTestWhileIdle(true);
            // 表示idle object evitor两次扫描之间要sleep的毫秒数
            config.setTimeBetweenEvictionRunsMillis(30000);
            // 表示idle object evitor每次扫描的最多的对象数
            config.setNumTestsPerEvictionRun(10);
            // 表示一个对象至少停留在idle状态的最短时间,然后才能被idle object
            // evitor扫描并驱逐;这一项只有在timeBetweenEvictionRunsMillis大于0时才有意义
            config.setMinEvictableIdleTimeMillis(60000);
            // 根据配置实例化jedis池

            // pool = new JedisPool(config, props.getProperty("redis.ip"),
            // Integer.valueOf(props.getProperty("redis.port")));
            String password = props.getProperty("redis.password");
            if (StringUtils.isBlank(password)) {
                password = null;
            }
            pool = new JedisPool(config, props.getProperty("redis.ip"),
                    Integer.valueOf(props.getProperty("redis.port")), 3000, password);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /** 
     * 获得jedis对象 
     * 
     */
    public synchronized static Jedis getJedisObject() {
        logger.info("获取redies");
        Jedis jedis = null;
        if (pool != null) {
            try {
                jedis = pool.getResource();
            } catch (Exception e) {
                logger.error(e.getMessage(), e);
            }
        }
        return jedis;
    }

    /** 
     * 归还jedis对象
     *  
     */
    public synchronized static void recycleJedisOjbect(Jedis jedis) {
        logger.info("释放资源.....");
        if (jedis != null) {
            jedis.close();
        }
    }

    /**
     * 
     * 测试jedis池方法
     * 
     */
    public static void main(String[] args) {
        // Properties props = new Properties();
        // System.out.println(props.getProperty("jedis.pool.maxIdle"));
        Jedis jedis = getJedisObject();// 获得jedis实例
        // 获取jedis实例后可以对redis服务进行一系列的操作
        jedis.set("name", "zhuxun");
        jedis.expire("name", 5000);
        System.out.println(jedis.get("name"));
        jedis.del("name");
        System.out.println(jedis.exists("name"));
        recycleJedisOjbect(jedis); // 将 获取的jedis实例对象还回池中
    }
}

3 redisUtil.java的使用

实际项目的一个例子

@Component
public class RedisUtil {
    // 缓存所有App用户
    private static String ALL_APP_USERS = "all_app_users";


/**
     * 获取所有的APP 用户
     * liuping
     */
    @SuppressWarnings({ "deprecation", "unchecked" })
    public static List<User> getAllAppUsers() {
        Jedis redis = MyJedisPool.getJedisObject();// 获得jedis实例
        List<User> users = new ArrayList<>();
        try {
            String strAppUser = redis.get(ALL_APP_USERS);
            if (StringUtils.isBlank(strAppUser)) {
                users = refreshAppUser(redis);
            } else {
                JSONArray jsonArray = JSONArray.fromObject(strAppUser);
                users = JSONArray.toList(jsonArray, User.class);
            }
        } catch (Exception e) {
            logger.error("Failed to get app user from redis: {}", e.getMessage());
        } finally {
            MyJedisPool.recycleJedisOjbect(redis);
        }
        return users;
    }

/**
     * 刷新App用户列表
     * liuping
     */
    public static List<User> refreshAppUser(Jedis redis) {
        if (redis == null)
            redis = MyJedisPool.getJedisObject();// 获得jedis实例
        List<User> users = new ArrayList<>();
        try {
            User user = new User();
            user.setLimit(-1);
            WebApplicationContext context = ContextLoader.getCurrentWebApplicationContext();
            UserService service = (UserService) context.getBean("userService");

            users = service.selectByIndex(user);

            if (null != users) {
                JSONArray jsonArray = JSONArray.fromObject(users);
                String struser = String.valueOf(jsonArray);
                redis.set(ALL_APP_USERS, struser);
                redis.expire(ALL_APP_USERS, EXPIRE_2_HOUR); // 设置过期时间
            }
        } catch (Exception e) {
            logger.error("Failed to get wxuser from redis: {}", e.getMessage());
        } finally {
            MyJedisPool.recycleJedisOjbect(redis);
        }
        return users;
    }

猜你喜欢

转载自blog.csdn.net/qiaziliping/article/details/80990174