【nosql-redis】3 java直接操作redis

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;
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值