`

redis demo

 
阅读更多

 

下载redis windows版:

redis-2.4.5-win32-win64.zip

开启 redis-server 服务

 

1.pom.xml 

<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.11</version>
		</dependency>

		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.17</version>
		</dependency>

		<!--Redis -->
		<dependency>
			<groupId>redis.clients</groupId>
			<artifactId>jedis</artifactId>
			<version>2.0.0</version>
			<type>jar</type>
			<scope>compile</scope>
		</dependency>
	</dependencies>

 

2.JedisPool

/**
 * jedis池使用
 *
 */
public class MyJedisPool {
	// jedis池
	private static JedisPool pool;
	// jedis实例
	private static Jedis jedis;

	// 静态代码初始化池配置
	static {
		// 加载redis配置文件
		ResourceBundle bundle = ResourceBundle.getBundle("redis");
		if (bundle == null) {
			throw new IllegalArgumentException("[redis.properties] is not found!");
		}
		// 创建jedis池配置实例
		JedisPoolConfig config = new JedisPoolConfig();
		// 设置池配置项值
		config.setMaxActive(Integer.valueOf(bundle.getString("redis.pool.maxActive")));
		config.setMaxIdle(Integer.valueOf(bundle.getString("redis.pool.maxIdle")));
		config.setMaxWait(Long.valueOf(bundle.getString("redis.pool.maxWait")));
		config.setTestOnBorrow(Boolean.valueOf(bundle.getString("redis.pool.testOnBorrow")));
		config.setTestOnReturn(Boolean.valueOf(bundle.getString("redis.pool.testOnReturn")));
		// 根据配置实例化jedis池
		pool = new JedisPool(config, bundle.getString("redis.ip"), Integer.valueOf(bundle.getString("redis.port")));
		// 从jedis池中获取一个jedis实例
		jedis = pool.getResource();
	}

	/**
	 * 测试jedis池方法
	 */
	@Test
	public void test1() {

		// 获取jedis实例后可以对redis服务进行一系列的操作
		jedis.set("name", "xmong");
		System.out.println(jedis.get("name"));
		jedis.del("name");
		System.out.println(jedis.exists("name"));

		// 释放对象池,即获取jedis实例使用后要将对象还回去
		pool.returnResource(jedis);
	}

	/**
	 * Redis存储初级的字符串 CRUD
	 */
	@Test
	public void testBasicString() {
		// -----添加数据----------
		jedis.set("name", "minxr");// 向key-->name中放入了value-->minxr
		System.out.println(jedis.get("name"));// 执行结果:minxr

		// -----修改数据-----------
		// 1、在原来基础上修改
		jedis.append("name", "jarorwar"); // 很直观,类似map 将jarorwar append到已经有的value之后
		System.out.println(jedis.get("name"));// 执行结果:minxrjarorwar

		// 2、直接覆盖原来的数据
		jedis.set("name", "闵晓荣");
		System.out.println(jedis.get("name"));// 执行结果:闵晓荣

		// 删除key对应的记录
		jedis.del("name");
		System.out.println(jedis.get("name"));// 执行结果:null

		/**
		 * mset相当于 jedis.set("name","minxr"); jedis.set("jarorwar","闵晓荣");
		 */
		jedis.mset("name", "minxr", "jarorwar", "闵晓荣");
		System.out.println(jedis.mget("name", "jarorwar"));

	}

	/**
	 * jedis操作Map
	 */
	@Test
	public void testMap() {
		Map<String, String> user = new HashMap<String, String>();
		user.put("name", "minxr");
		user.put("pwd", "password");
		jedis.hmset("user", user);
		// 取出user中的name,执行结果:[minxr]-->注意结果是一个泛型的List
		// 第一个参数是存入redis中map对象的key,后面跟的是放入map中的对象的key,后面的key可以跟多个,是可变参数
		List<String> rsmap = jedis.hmget("user", "name");
		System.out.println(rsmap);

		// 删除map中的某个键值
		// jedis.hdel("user","pwd");
		System.out.println(jedis.hmget("user", "pwd")); // 因为删除了,所以返回的是null
		System.out.println(jedis.hlen("user")); // 返回key为user的键中存放的值的个数1
		System.out.println(jedis.exists("user"));// 是否存在key为user的记录 返回true
		System.out.println(jedis.hkeys("user"));// 返回map对象中的所有key [pwd, name]
		System.out.println(jedis.hvals("user"));// 返回map对象中的所有value [minxr, password]

		Iterator<String> iter = jedis.hkeys("user").iterator();
		while (iter.hasNext()) {
			String key = iter.next();
			System.out.println(key + ":" + jedis.hmget("user", key));
		}

	}

	/**
	 * jedis操作List
	 */
	@Test
	public void testList() {
		// 开始前,先移除所有的内容
		jedis.del("java framework");
		System.out.println(jedis.lrange("java framework", 0, -1));
		// 先向key java framework中存放三条数据
		jedis.lpush("java framework", "spring");
		jedis.lpush("java framework", "struts");
		jedis.lpush("java framework", "hibernate");
		// 再取出所有数据jedis.lrange是按范围取出,
		// 第一个是key,第二个是起始位置,第三个是结束位置,jedis.llen获取长度 -1表示取得所有
		System.out.println(jedis.lrange("java framework", 0, -1));
	}

	/**
	 * jedis操作Set
	 */
	@Test
	public void testSet() {
		// 添加
		jedis.sadd("sname", "minxr");
		jedis.sadd("sname", "jarorwar");
		jedis.sadd("sname", "闵晓荣");
		jedis.sadd("sname", "noname");
		// 移除noname
		jedis.srem("sname", "noname");
		System.out.println(jedis.smembers("sname"));// 获取所有加入的value
		System.out.println(jedis.sismember("sname", "minxr"));// 判断 minxr 是否是sname集合的元素
		System.out.println(jedis.srandmember("sname"));
		System.out.println(jedis.scard("sname"));// 返回集合的元素个数
	}

	@Test
	public void test() throws InterruptedException {
		// keys中传入的可以用通配符
		System.out.println(jedis.keys("*")); // 返回当前库中所有的key [sose, sanme, name, jarorwar, foo, sname, java framework,
												// user, braand]
		System.out.println(jedis.keys("*name"));// 返回的sname [sname, name]
		System.out.println(jedis.del("sanmdde"));// 删除key为sanmdde的对象 删除成功返回1 删除失败(或者不存在)返回 0
		System.out.println(jedis.ttl("sname"));// 返回给定key的有效时间,如果是-1则表示永远有效
		jedis.setex("timekey", 10, "min");// 通过此方法,可以指定key的存活(有效时间) 时间为秒
		Thread.sleep(5000);// 睡眠5秒后,剩余时间将为<=5
		System.out.println(jedis.ttl("timekey")); // 输出结果为5
		jedis.setex("timekey", 1, "min"); // 设为1后,下面再看剩余时间就是1了
		System.out.println(jedis.ttl("timekey")); // 输出结果为1
		System.out.println(jedis.exists("key"));// 检查key是否存在
		System.out.println(jedis.rename("timekey", "time"));
		System.out.println(jedis.get("timekey"));// 因为移除,返回为null
		System.out.println(jedis.get("time")); // 因为将timekey 重命名为time 所以可以取得值 min

		// jedis 排序
		// 注意,此处的rpush和lpush是List的操作。是一个双向链表(但从表现来看的)
		jedis.del("a");// 先清除数据,再加入数据进行测试
		jedis.rpush("a", "1");
		jedis.lpush("a", "6");
		jedis.lpush("a", "3");
		jedis.lpush("a", "9");
		System.out.println(jedis.lrange("a", 0, -1));// [9, 3, 6, 1]
		System.out.println(jedis.sort("a")); // [1, 3, 6, 9] //输入排序后结果
		System.out.println(jedis.lrange("a", 0, -1));
	}
}

 

3. redis.properties

#最大分配的对象数
redis.pool.maxActive=1024
#最大能够保错误的Unicode字符串!
redis.pool.maxIdle=200
#当池内没有返回对象时,最大等待时间
redis.pool.maxWait=1000
#当调错误的Unicode字符串!
redis.pool.testOnBorrow=true
#当调错误的Unicode字符串!
redis.pool.testOnReturn=true
#IP
redis.ip=127.0.0.1
#Port
redis.port=6379

 

 另外,补充 redis 的工具类

 JedisUtil

import java.util.ResourceBundle;

import org.apache.log4j.Logger;

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

public final class JedisUtil {
	private static final Logger LOGGER = Logger.getLogger(JedisUtil.class);
	private static int DEFAULT_DB_INDEX = 0;

	private static JedisPool jedisPool = null;

	private JedisUtil() {
		// private constructor
	}

	private static void initialPool() {
		try {
			ResourceBundle bundle = ResourceBundle.getBundle("redis");
			if (bundle == null) {
				throw new IllegalArgumentException("[redis.properties] is not found!");
			}
			// 创建jedis池配置实例
			JedisPoolConfig config = new JedisPoolConfig();
			// 设置池配置项值
			String address = bundle.getString("redis.ip");
			int port = Integer.valueOf(bundle.getString("redis.port"));
			LOGGER.info("Redis server info: " + address + ":" + port);

			String strDbIndex = bundle.getString("redis.db_index");
			if (strDbIndex != null) {
				DEFAULT_DB_INDEX = Integer.valueOf(strDbIndex);
			}

			String strMaxActive = bundle.getString("redis.pool.maxActive");
			if (strMaxActive != null) {
				config.setMaxActive(Integer.valueOf(strMaxActive));
			}

			String strMaxIdle = bundle.getString("redis.pool.maxIdle");
			if (strMaxIdle != null) {
				config.setMaxIdle(Integer.valueOf(strMaxIdle));
			}

			String strMaxWait = bundle.getString("redis.pool.maxWait");
			if (strMaxWait != null) {
				config.setMaxWait(Long.valueOf(strMaxWait));
			}

			String strTestOnBorrow = bundle.getString("redis.pool.testOnBorrow");
			if (strTestOnBorrow != null) {
				config.setTestOnBorrow(Boolean.valueOf(strTestOnBorrow));
			}

			String strTestOnReturn = bundle.getString("redis.pool.testOnReturn");
			if (strTestOnReturn != null) {
				config.setTestOnReturn(Boolean.valueOf(strTestOnReturn));
			}

			String strTimeout = bundle.getString("redis.pool.timeout");
			int timeout = 2000;// 默认2000
			if (strTimeout != null) {
				timeout = Integer.valueOf(strTimeout);
			}
			// 根据配置实例化jedis池
			jedisPool = new JedisPool(config, address, port, timeout);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {

		}

	}

	public synchronized static Jedis getJedisInstance() {
		if (jedisPool == null) {
			initialPool();
		}
		try {
			if (jedisPool != null) {
				Jedis resource = jedisPool.getResource();
				resource.select(DEFAULT_DB_INDEX);
				return resource;
			} else {
				return null;
			}
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	public synchronized static Jedis getJedisInstance(final int dbIndex) {
		if (jedisPool == null) {
			initialPool();
		}
		try {
			if (jedisPool != null) {
				Jedis resource = jedisPool.getResource();
				resource.select(dbIndex);
				return resource;
			} else {
				return null;
			}
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	public static void returnResource(final Jedis jedis) {
		if (jedis != null) {
			jedisPool.returnResource(jedis);
		}
	}
}

 

 

 

 

分享到:
评论

相关推荐

    redis demo

    本地连接redis的demo,可以是指对应key的过期时间 ,

    完整的java操作redis demo

    在这个“完整的java操作redis demo”中,我们不仅可以看到如何使用Jedis进行基本的Redis操作,还能学习到如何结合Java处理Excel数据,这在数据导入导出或者数据分析场景中非常实用。 首先,我们要了解Jedis的基本...

    RedisDemo.rar

    这个"RedisDemo.rar"压缩包很可能包含了一个使用StackExchange.Redis驱动的C#示例项目,帮助开发者了解如何在C#环境中集成和操作Redis。 1. **安装StackExchange.Redis**:在C#项目中使用StackExchange.Redis,首先...

    Spring boot redis demo.rar

    本教程将通过一个名为 "Spring boot redis demo" 的入门级项目,介绍如何在Spring Boot中集成并使用Redis,同时解决可能出现的乱码问题。 首先,我们需要在Spring Boot项目中添加Redis的相关依赖。在`pom.xml`或`...

    SpringMVC整合RedisDemo

    在本项目"SpringMVC整合RedisDemo"中,我们探讨了如何将流行的Java Web框架SpringMVC与高性能的键值存储系统Redis相结合,以提升Web应用的数据处理速度和效率。这个项目采用Maven作为构建工具,确保依赖管理的便捷性...

    redisdemo.zip

    在这个名为"redisdemo.zip"的压缩包中,我们很可能是找到了一个关于Redis的初级示例,帮助初学者理解如何在Java环境中集成和使用Redis。这个简单的学习资源可能会涵盖以下几个关键知识点: 1. **Redis基础概念**:...

    spring+redis Demo

    根据网上教程,自己整理学习的一份demo,记录一下,以便以后翻阅

    redisDemo.rar

    在本项目"redisDemo"中,我们将探讨如何在SpringBoot框架下集成Jedis库来操作Redis,并封装基本的数据操作,涉及Redis的五种基础数据类型。 首先,`springboot`是一个由Pivotal团队维护的Java框架,用于简化Spring...

    RedisDemo案例

    **RedisDemo案例** Redis,全称Remote Dictionary Server,是一个开源的、高性能的键值存储系统。它被广泛用于数据缓存、消息队列、计数器以及多种分布式系统中的数据存储。Redis以其丰富的数据结构(如字符串、...

    简单的redisdemo

    在本“简单的redisdemo”中,我们将探索如何搭建和使用Redis。 **安装Redis** 1. 下载Redis源码:首先,你需要从官方网站(https://redis.io/download)下载Redis的最新稳定版本。 2. 编译安装:解压下载的源码,...

    redis demo c#

    在"redisDemo"项目中,你可能会找到以下关键组件: 1. 连接配置:在C#代码中,你需要创建一个ConnectionMultiplexer实例来连接到Redis服务器。这通常涉及到提供服务器地址、端口号以及(如果有的话)密码。 ```...

    RedisDemo_redis_

    本示例"RedisDemo_redis_"将带你入门如何在C#中使用Redis进行数据的存储和读取。 首先,我们需要安装`StackExchange.Redis` NuGet包,它是C#中广泛使用的Redis客户端库。通过Visual Studio的包管理器或命令行工具...

    Shiro整合springMvc+Mybatis+Redis demo源码下载.zip

    在这个"Shiro整合springMvc+Mybatis+Redis demo源码下载.zip"中,我们可以看到一个综合示例,演示了如何将Shiro与Spring MVC、Mybatis和Redis集成,以构建一个高效且安全的Web应用程序。 1. **Spring MVC整合Shiro*...

    .Net Redis Demo

    标题中的".Net Redis Demo"指的是一个使用.NET框架与Redis数据库交互的演示项目。Redis是一个开源的、基于键值对的数据存储系统,常用于缓存、消息队列和数据持久化等场景。在这个项目中,开发者可能通过.NET的库@...

    spring boot redis demo

    在本文中,我们将深入探讨如何使用Spring Boot与Redis进行集成,并通过一个简单的示例来演示其配置和操作过程。Spring Boot是Spring框架的一个模块,它简化了创建独立、生产级别的基于Spring的应用程序。Redis则是一...

    spring boot整合redis demo代码

    Redis 是一个高性能的键值数据存储系统,常用于缓存、消息队列等场景。本示例将详细介绍如何在Spring Boot项目中整合Redis,实现数据的高效存储与访问。 一、集成Redis 1. 添加依赖 在Spring Boot项目的`pom.xml`...

    redis学习笔记+练习springboot-redisdemo

    本资源包包含了关于Redis的学习笔记以及一个基于SpringBoot整合Redis的实战项目——"springboot-redisdemo",旨在帮助你深入理解和应用Redis。 首先,让我们详细探讨Redis的核心知识点: 1. **Redis的数据类型**:...

Global site tag (gtag.js) - Google Analytics