文档章节

在java实现redis缓存技术的基本操作

小贱是个程序员
 小贱是个程序员
发布于 2016/11/17 14:26
字数 1015
阅读 536
收藏 0
点赞 0
评论 0

需要jar包:

jedis-2.1.0.jar

commons-pool-1.6.jar

代码

package com.wangbingan.db;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import org.junit.Before;
import org.junit.Test;

import com.wangbinga.util.RedisUtil;

import redis.clients.jedis.Jedis;

/**
 * Redis测试
 * 
 * @author AK
 * 
 */
public class RedisTest {

	private Jedis jedis;

	// private String name = "Usher";
	// private String age = "44";
	// private String sex = "male";

	/**
	 * 测试用例启动前运行
	 */
	@Before
	public void setup() {
		// 服务器ip
		String ip = "60.28.29.22";
		// 服务器端口
		int port = 6379;
		// 授权密码
		String password = "Ytw-2015#Ehsan";
		// 链接redis服务器
		jedis = new Jedis(ip, port);
		// 授权
		jedis.auth(password);
	}

	/**
	 * String测试
	 */
	@Test
	public void stringTest() {
		// 添加数据
		jedis.set("name", "Usher");

		System.out.println("添加数据:" + jedis.get("name") + "\n");
		// 拼接数据
		jedis.append("name", "\040is very cool!");

		System.out.println("拼接数据:" + jedis.get("name") + "\n");
		// 删除数据
		jedis.del("name");

		System.out.println("删除数据:" + jedis.get("name") + "\n");

		// 设置多个数据
		jedis.mset("name", "Usher", "age", "24", "sex", "male");

		// 某个数据+
		jedis.incrBy("age", 10);

		System.out.println("姓名:" + jedis.get("name") + "\040年龄:"
				+ jedis.get("age") + "\040性别:" + jedis.get("sex") + "\n");
	}

	/**
	 * Map测试
	 */
	@Test
	public void mapTest() {
		Map<String, String> map = new HashMap<String, String>();
		// 添加数据
		map.put("name", "Usher");
		map.put("age", "24");
		map.put("sex", "male");
		// 添加到redis中
		jedis.hmset("Information", map);

		System.out.println("添加Map数据:"
				+ jedis.hmget("Information", "name", "age", "sex") + "\n");
		// 删除数据
		jedis.hdel("Information", "name");

		System.out.println("删除Map数据:" + jedis.hmget("Information", "name")
				+ "\n");
		// 返回key=Information的值的个数
		System.out.println("返回key=Information的值的个数:"
				+ jedis.hlen("Information") + "\n");
		// 判断是否存在key=Information的对象
		System.out.println("判断是否存在key=Information的对象:"
				+ jedis.exists("Information") + "\n");
		// 返回map对象中的所有key值
		System.out.println("返回map对象中的所有key值:" + jedis.hkeys("Information")
				+ "\n");
		// 返回map对象中的所有value值
		System.out.println("返回map对象中的所有value值:" + jedis.hvals("Information")
				+ "\n");
		// 循环迭代key
		Iterator<String> it = jedis.hkeys("Information").iterator();
		// 判断是否有元素存在
		while (it.hasNext()) {
			// 获取元素key
			String key = it.next();
			System.out.println("返回key为" + key + "的值:"
					+ jedis.hmget("Information", key) + "\n");
		}
	}

	/**
	 * List测试
	 */
	@Test
	public void listTest() {
		// 先清空List
		jedis.del("Information");
		// 查看List是否清空
		System.out.println("Lis[清空后]t:" + jedis.lrange("Information", 0, -1)
				+ "\n");
		// 添加数据
		jedis.lpush("Information", "Usher");
		jedis.lpush("Information", "sex");
		jedis.lpush("Information", "age");
		// 查看List元素
		System.out.println("List[添加后]:" + jedis.lrange("Information", 0, -1)
				+ "\n");
		// 清空List
		jedis.del("Information");
		// 添加数据
		jedis.lpush("Information", "Elliot");
		jedis.lpush("Information", "sex");
		jedis.lpush("Information", "age");
		// 查看List元素
		System.out.println("List[清空+添加]:" + jedis.lrange("Information", 0, -1)
				+ "\n");
	}

	/**
	 * set测试
	 */
	@Test
	public void setTest() {
		// 添加元素
		jedis.sadd("user", "Usher");
		jedis.sadd("user", "sex");
		jedis.sadd("user", "age");
		System.out.println("Key的value值[删除前]:" + jedis.smembers("user") + "\n");
		// 删除元素
		jedis.srem("user", "age");
		// 所有元素的value()
		System.out.println("Key的value值[删除后]:" + jedis.smembers("user") + "\n");
		// 判断值是否存在
		System.out.println("判断值是否存在:" + jedis.sismember("user", "age") + "\n");
		// 返回集合元素的个数
		System.out.println("返回集合元素的个数:" + jedis.scard("user") + "\n");
		// 返回随机元素
		System.out.println("返回随机元素:" + jedis.srandmember("user") + "\n");
	}

	/**
	 * jedis 排序
	 */
	@Test
	public void sortTest() {
		// 添加元素
		jedis.rpush("sort", "1");
		jedis.lpush("sort", "2");
		jedis.lpush("sort", "3");
		jedis.lpush("sort", "4");
		System.out.println("元素:" + jedis.lrange("sort", 0, -1) + "\n");
		// 排序
		System.out.println("排序:" + jedis.sort("sort") + "\n");
		// jedis.sort("sort");
		// 再输出一次
		// System.out.println("元素:" + jedis.lrange("sort", 0, -1) + "\n");
	}

	/**
	 * 测试中文
	 */
	@Test
	public void chineseTest() {
		RedisUtil.getJedis().set("name", "中文测试");
		System.out.println(RedisUtil.getJedis().get("name"));
	}
}

配置链接池

package com.wangbinga.util;

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

/**
 * Redis连接池
 * 
 * @author AK
 * 
 */
public final class RedisUtil {
	// Redis服务器IP
	private static String ADDR = "60.28.29.22";
	// Redis的端口号
	private static int PORT = 6379;
	// 访问密码
	private static String AUTH = "Ytw-2015#Ehsan";
	// 可用连接实例的最大数目,默认值为8;
	// 如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。
	private static int MAX_ACTIVE = 1024;
	// 控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值也是8。
	private static int MAX_IDLE = 200;
	// 等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException;
	private static long MAX_WAIT = 10000;
	// 最大延迟时间
	private static int TIMEOUT = 10000;
	// 在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;
	private static boolean TEST_ON_BORROW = true;

	private static JedisPool jedisPool = null;

	/**
	 * 初始化Redis连接池
	 */
	static {
		try {
			JedisPoolConfig config = new JedisPoolConfig();
			config.setMaxActive(MAX_ACTIVE);
			config.setMaxIdle(MAX_IDLE);
			config.setMaxWait(MAX_WAIT);
			config.setTestOnBorrow(TEST_ON_BORROW);
			jedisPool = new JedisPool(config, ADDR, PORT, TIMEOUT, AUTH);

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 获取Jedis实例
	 * 
	 * @return
	 */
	public synchronized static Jedis getJedis() {
		try {
			if (jedisPool != null) {
				Jedis resource = jedisPool.getResource();
				return resource;
			} else {
				return null;
			}
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	/**
	 * 释放jedis资源
	 * 
	 * @param jedis
	 */
	public static void returnResource(final Jedis jedis) {
		if (jedis != null) {
			jedisPool.returnResource(jedis);
		}
	}
}

 

本文转载自:https://my.oschina.net/Tsher2015/blog/512919

共有 人打赏支持
小贱是个程序员
粉丝 3
博文 39
码字总数 14357
作品 0
珠海
程序员
Java高级程序员面试大纲——错过了金三,你还要错过银四吗

跳槽时时刻刻都在发生,但是我建议大家跳槽之前,先想清楚为什么要跳槽。切不可跟风,看到同事一个个都走了,自己也盲目的开始面试起来(期间也没有准备充分),到底是因为技术原因(影响自己...

Java高级架构
04/27
0
0
面试必看!2018年4月份阿里最新的java程序员面试题目

目录 技术一面(23问) 技术二面(3大块) 性能优化(21点) 项目实战(34块) JAVA方向技术考察点(15点) JAVA开发技术面试中可能问到的问题(17问) 阿里技术面试1 1.Java IO流的层次结构...

美的让人心动
04/16
0
0
Java程序员面试大纲—错过了金三银四,你还要错过2018吗?

跳槽时时刻刻都在发生,但是我建议大家跳槽之前,先想清楚为什么要跳槽。切不可跟风,看到同事一个个都走了,自己也盲目的开始面试起来(期间也没有准备充分),到底是因为技术原因(影响自己...

java高级架构牛人
04/27
0
0
实际项目中是选用Map还是选用Redis作为缓存?为什么?

参考网页 https://segmentfault.com/q/1010000009106416 实际项目中是选用Map还是选用Redis作为缓存?为什么? 具体选择Map还是Redis作为缓存,要看具体的需求,具体的应用场景 本地缓存和分...

karma123
06/27
0
0
面试总结——Java高级工程师(附答案)

面试前面也总结了一和二, 这第三篇可能更偏向于是内心的独白篇和面试技巧总结吧..... 一、独白 之前也面试别人,现在轮到自己找工作,怎么说呢,每个面试官的看法不一样,面试的方式就不一样...

欧阳海阳
07/12
0
0
新浪、百度、好未来3offer到手全记录 | 牛客面经

新浪、百度、好未来3offer到手全记录 牛客面经 原创 2017-09-19 牛友 招聘消息汇总 渣渣的秋招之路 附上新浪,百度,好未来面经 作者:offer快到碗里来?。! 来源:牛客网 楼主是本科渣渣,...

公子只识黛玉
04/17
0
0
redis缓存服务器(nginx+tomcat+redis+mysql实现session会话共享)

一、redis介绍 redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型...

何小帅
06/26
0
0
一线互联网公司研发工程师(Java)月薪25-50k的技能要求整理

良好的开发基础,精通Java语言基础,熟练掌握多线程开发技术, 对于Java基础技术体系(包括JVM、类装载机制、JUC、NIO、网络)有深入的理解和实践经验; 熟练掌握常用Java技术框架,能编写高...

vvx1024
01/06
0
0
阿里、百度等多家公司Java面试记录与总结

算算自己大概面试了近十家公司,也拿到了几个Offer,现在面试告一段落,简单总结下面试经验。 我现在主要的方向是Java服务端开发,把遇到的问题和大家分享一下,也谈谈关于技术人员如何有方向...

07/02
0
0
Java架构师面试题全分享,你离架构师还有多远?

经常面试一些候选人,整理了下我面试使用的题目,陆陆续续整理出来的题目很多,所以每次会抽一部分来问。答案会在后面的文章中逐渐发布出来。 基础题目 Java线程的状态 进程和线程的区别,进...

重走Java
07/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

shell中的函数、shell中的数组、告警系统需求分析

shell中的函数 格式: 格式: function f_name() { command } 函数必须要放在最前面 示例1(用来打印参数) 示例2(用于定义加法) 示例3(用于显示IP) shell中的数组 shell中的数组1 定义数...

Zhouliang6
54分钟前
2
0
用 Scikit-Learn 和 Pandas 学习线性回归

      对于想深入了解线性回归的童鞋,这里给出一个完整的例子,详细学完这个例子,对用scikit-learn来运行线性回归,评估模型不会有什么问题了。 1. 获取数据,定义问题     没有...

wangxuwei
今天
1
0
MAC安装MAVEN

一:下载maven压缩包(Zip或tar可选),解压压缩包 二:打开终端输入:vim ~/.bash_profile(如果找不到该文件新建一个:touch ./bash_profile) 三:输入i 四:输入maven环境变量配置 MAVEN_HO...

WALK_MAN
今天
0
0
33.iptables备份与恢复 firewalld的9个zone以及操作 service的操作

10.19 iptables规则备份和恢复 10.20 firewalld的9个zone 10.21 firewalld关于zone的操作 10.22 firewalld关于service的操作 10.19 iptables规则备份和恢复: ~1. 保存和备份iptables规则 ~2...

王鑫linux
今天
2
0
大数据教程(2.11):keeperalived+nginx高可用集群搭建教程

上一章节博主为大家介绍了目前大型互联网项目的系统架构体系,相信大家应该注意到其中很重要的一块知识nginx技术,在本节博主将为大家分享nginx的相关技术以及配置过程。 一、nginx相关概念 ...

em_aaron
今天
1
0
Apache Directory Studio连接Weblogic内置LDAP

OBIEE默认使用Weblogic内置LDAP管理用户及组。 要整理已存在的用户及组,此前办法是导出安全数据,文本编辑器打开认证文件,使用正则表达式获取用户及组的信息。 后来想到直接用Apache Dire...

wffger
今天
2
0
HFS

FS,它是一种上传文件的软件。 专为个人用户所设计的 HTTP 档案系统 - Http File Server,如果您觉得架设 FTP Server 太麻烦,那么这个软件可以提供您更方便的档案传输系统,下载后无须安装,...

garkey
今天
1
0
Java IO类库之BufferedInputStream

一、BufferedInputStream介绍 /** * A <code>BufferedInputStream</code> adds * functionality to another input stream-namely, * the ability to buffer the input and to * sup......

老韭菜
今天
0
0
STM 32 窗口看门狗

http://bbs.elecfans.com/jishu_805708_1_1.html https://blog.csdn.net/a1985831055/article/details/77404131...

whoisliang
昨天
1
0
Dubbo解析(六)-服务调用

当dubbo消费方和提供方都发布和引用完成后,第四步就是消费方调用提供方。 还是以dubbo的DemoService举例 -- 提供方<dubbo:application name="demo-provider"/><dubbo:registry address="z...

青离
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部