Redis学习笔记(4)—— Jedis入门
一、Jedis介绍
Redis不仅是使用命令来操作,现在基本上主流的语言都有客户端支持,比如Java、C、C#、C++、php、Node、js、Go等。
在官方网站里列的一些Java客户端,有jedis、Redisson、Jredis等,其中官方推荐使用jedis,在企业中用的最多的就是Jedis。
二、Java连接Redis
2.1 导入jar包
- commons-pool2-2.3.jar
- jedis-2.7.0.jar
2.2 单实例连接
- @Test
- public void testJedisSingle() throws Exception {
- // 1.设置ip地址和端口号
- Jedis jedis = new Jedis("192.168.25.129", 6379);
- // 2.设置数据
- jedis.set("name", "zhangsan");
- // 3.获得数据
- String name = jedis.get("name");
- System.out.println(name);
- // 4.释放资源
- jedis.close();
- }
注:如果执行上面代码时抛出如下异常
- redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeOutException: connect timed out
必须关闭Linux防火墙
- service iptables stop
2.3 连接池连接
- @Test
- public void testJedisPool() throws Exception {
- // 1.获得连接池配置对象,设置配置项
- JedisPoolConfig config = new JedisPoolConfig();
- // 1.1 最大连接数
- config.setMaxTotal(30);
- // 1.2 最大空闲连接数
- config.setMaxIdle(10);
- // 2.获得连接池
- JedisPool jedisPool = new JedisPool(config, "192.168.25.129", 6379);
- // 3.获得核心对象
- Jedis jedis = null;
- try {
- jedis = jedisPool.getResource();
- // 4.设置数据
- jedis.set("name", "lisi");
- // 5.获得数据
- String name = jedis.get("name");
- System.out.println(name);
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- if (jedis != null) {
- jedis.close();
- }
- // 虚拟机关闭时,释放pool资源
- if (jedisPool != null) {
- jedisPool.close();
- }
- }
- }
2.4 集群连接
- @Test
- public void testJedisCluster() throws Exception {
- // 第一步:使用JedisCluster对象。需要一个Set<HostAndPort>参数。Redis节点的列表。
- Set<HostAndPort> nodes = new HashSet<>();
- nodes.add(new HostAndPort("192.168.25.129", 7001));
- nodes.add(new HostAndPort("192.168.25.129", 7002));
- nodes.add(new HostAndPort("192.168.25.129", 7003));
- nodes.add(new HostAndPort("192.168.25.129", 7004));
- nodes.add(new HostAndPort("192.168.25.129", 7005));
- nodes.add(new HostAndPort("192.168.25.129", 7006));
- // 第二步:直接使用JedisCluster对象操作redis。在系统中单例存在。
- JedisCluster jedisCluster = new JedisCluster(nodes);
- jedisCluster.set("name", "zhangsan");
- String name = jedisCluster.get("name");
- // 第三步:打印结果
- System.out.println(name);
- // 第四步:系统关闭前,关闭JedisCluster对象。
- jedisCluster.close();
- }
三、接口封装
常用的操作redis的方法提取出一个接口,分别对应单机版和集群版创建两个实现类。redis的操作在项目中应用较广泛,可将接口和实现类放在commons的工具类中。
3.1 接口定义
- public interface JedisClient {
- String set(String key, String value);
- String get(String key);
- Boolean exists(String key);
- Long expire(String key, int seconds);
- Long ttl(String key);
- Long incr(String key);
- Long hset(String key, String field, String value);
- String hget(String key, String field);
- Long hdel(String key, String... field);
- }
3.2 单机版实现类
- public class JedisClientPool implements JedisClient {
- private JedisPool jedisPool;
- public JedisPool getJedisPool() {
- return jedisPool;
- }
- public void setJedisPool(JedisPool jedisPool) {
- this.jedisPool = jedisPool;
- }
- @Override
- public String set(String key, String value) {
- Jedis jedis = jedisPool.getResource();
- String result = jedis.set(key, value);
- jedis.close();
- return result;
- }
- @Override
- public String get(String key) {
- Jedis jedis = jedisPool.getResource();
- String result = jedis.get(key);
- jedis.close();
- return result;
- }
- @Override
- public Boolean exists(String key) {
- Jedis jedis = jedisPool.getResource();
- Boolean result = jedis.exists(key);
- jedis.close();
- return result;
- }
- @Override
- public Long expire(String key, int seconds) {
- Jedis jedis = jedisPool.getResource();
- Long result = jedis.expire(key, seconds);
- jedis.close();
- return result;
- }
- @Override
- public Long ttl(String key) {
- Jedis jedis = jedisPool.getResource();
- Long result = jedis.ttl(key);
- jedis.close();
- return result;
- }
- @Override
- public Long incr(String key) {
- Jedis jedis = jedisPool.getResource();
- Long result = jedis.incr(key);
- jedis.close();
- return result;
- }
- @Override
- public Long hset(String key, String field, String value) {
- Jedis jedis = jedisPool.getResource();
- Long result = jedis.hset(key, field, value);
- jedis.close();
- return result;
- }
- @Override
- public String hget(String key, String field) {
- Jedis jedis = jedisPool.getResource();
- String result = jedis.hget(key, field);
- jedis.close();
- return result;
- }
- @Override
- public Long hdel(String key, String... field) {
- Jedis jedis = jedisPool.getResource();
- Long result = jedis.hdel(key, field);
- jedis.close();
- return result;
- }
- }
配置文件applicationContext-redis.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
- xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
- http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
- http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
- http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd">
- <!-- 配置redis单机版连接 -->
- <bean id="jedisClientPool" class="cn.e3mall.common.jedis.JedisClientPool">
- <property name="jedisPool" ref="jedisPool"/>
- </bean>
- <bean id="jedisPool" class="redis.clients.jedis.JedisPool">
- <constructor-arg name="host" value="192.168.25.129"/>
- <constructor-arg name="port" value="6379"/>
- </bean>
- </beans>
3.3 集群版实现类
- public class JedisClientCluster implements JedisClient {
- private JedisCluster jedisCluster;
- public JedisCluster getJedisCluster() {
- return jedisCluster;
- }
- public void setJedisCluster(JedisCluster jedisCluster) {
- this.jedisCluster = jedisCluster;
- }
- @Override
- public String set(String key, String value) {
- return jedisCluster.set(key, value);
- }
- @Override
- public String get(String key) {
- return jedisCluster.get(key);
- }
- @Override
- public Boolean exists(String key) {
- return jedisCluster.exists(key);
- }
- @Override
- public Long expire(String key, int seconds) {
- return jedisCluster.expire(key, seconds);
- }
- @Override
- public Long ttl(String key) {
- return jedisCluster.ttl(key);
- }
- @Override
- public Long incr(String key) {
- return jedisCluster.incr(key);
- }
- @Override
- public Long hset(String key, String field, String value) {
- return jedisCluster.hset(key, field, value);
- }
- @Override
- public String hget(String key, String field) {
- return jedisCluster.hget(key, field);
- }
- @Override
- public Long hdel(String key, String... field) {
- return jedisCluster.hdel(key, field);
- }
- }
spring的配置:
- <!-- 配置redis集群版的连接 -->
- <bean id="jedisClientCluster" class="cn.e3mall.common.jedis.JedisClientCluster">
- <property name="jedisCluster" ref="jedisCluster"></property>
- </bean>
- <bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
- <constructor-arg>
- <set>
- <bean class="redis.clients.jedis.HostAndPort">
- <constructor-arg name="host" value="192.168.25.129"></constructor-arg>
- <constructor-arg name="port" value="7001"></constructor-arg>
- </bean>
- <bean class="redis.clients.jedis.HostAndPort">
- <constructor-arg name="host" value="192.168.25.129"></constructor-arg>
- <constructor-arg name="port" value="7002"></constructor-arg>
- </bean>
- <bean class="redis.clients.jedis.HostAndPort">
- <constructor-arg name="host" value="192.168.25.129"></constructor-arg>
- <constructor-arg name="port" value="7003"></constructor-arg>
- </bean>
- <bean class="redis.clients.jedis.HostAndPort">
- <constructor-arg name="host" value="192.168.25.129"></constructor-arg>
- <constructor-arg name="port" value="7004"></constructor-arg>
- </bean>
- <bean class="redis.clients.jedis.HostAndPort">
- <constructor-arg name="host" value="192.168.25.129"></constructor-arg>
- <constructor-arg name="port" value="7005"></constructor-arg>
- </bean>
- <bean class="redis.clients.jedis.HostAndPort">
- <constructor-arg name="host" value="192.168.25.129"></constructor-arg>
- <constructor-arg name="port" value="7006"></constructor-arg>
- </bean>
- </set>
- </constructor-arg>
- </bean>
注意:单机版和集群版不能共存,使用单机版时注释集群版的配置。使用集群版,把单机版注释。
3.4 封装代码测试
- @Test
- public void testJedisClient() throws Exception {
- //初始化Spring容器
- ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-redis.xml");
- //从容器中获得JedisClient对象
- JedisClient jedisClient = applicationContext.getBean(JedisClient.class);
- jedisClient.set("first", "100");
- String result = jedisClient.get("first");
- System.out.println(result);
- }
Redis学习笔记(4)—— Jedis入门的更多相关文章
- Redis学习笔记7--Redis管道(pipeline)
redis是一个cs模式的tcp server,使用和http类似的请求响应协议.一个client可以通过一个socket连接发起多个请求命令.每个请求命令发出后client通常会阻塞并等待redis ...
- (转)redis 学习笔记(1)-编译、启动、停止
redis 学习笔记(1)-编译.启动.停止 一.下载.编译 redis是以源码方式发行的,先下载源码,然后在linux下编译 1.1 http://www.redis.io/download 先 ...
- Redis学习笔记(二)Redis支持的5种数据类型的总结之String和Hash
引言 在Redis学习笔记(一)中我们已经会安装并且简单使用Redis了,接下来我们一起来学习下Redis支持的5大数据类型. 简介 Redis是REmote DIctionary Server(远程 ...
- redis 学习笔记(6)-cluster集群搭建
上次写redis的学习笔记还是2014年,一转眼已经快2年过去了,在段时间里,redis最大的变化之一就是cluster功能的正式发布,以前要搞redis集群,得借助一致性hash来自己搞shardi ...
- Redis学习笔记~目录
回到占占推荐博客索引 百度百科 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合). ...
- Redis学习笔记4-Redis配置详解
在Redis中直接启动redis-server服务时, 采用的是默认的配置文件.采用redis-server xxx.conf 这样的方式可以按照指定的配置文件来运行Redis服务.按照本Redi ...
- Redis学习笔记一:数据结构与对象
1. String(SDS) Redis使用自定义的一种字符串结构SDS来作为字符串的表示. 127.0.0.1:6379> set name liushijie OK 在如上操作中,name( ...
- Redis学习笔记之ABC
Redis学习笔记之ABC Redis命令速查 官方帮助文档 中文版本1 中文版本2(反应速度比较慢) 基本操作 字符串操作 set key value get key 哈希 HMSET user:1 ...
- Hadoop学习笔记(1) ——菜鸟入门
Hadoop学习笔记(1) ——菜鸟入门 Hadoop是什么?先问一下百度吧: [百度百科]一个分布式系统基础架构,由Apache基金会所开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序. ...
- Redis学习笔记(二)-key相关命令【转载】
转自 Redis学习笔记(二)-key相关命令 - 点解 - 博客园http://www.cnblogs.com/leny/p/5638764.html Redis支持的各种数据类型包括string, ...
随机推荐
- win 10 提升权限
问题:每次打开Visual Studio 提示,需要重启以获取管理员权限 解决: 1.Win+R 2.输入:gpedit.msc 3.windows设置->安全设置->本地策略->安 ...
- C语言学习笔记--多维数组和多维指针
1. 指向指针的指针 (1)指针的本质是变量,会占用一定的内存空间 (2)可以定义指针的指针来保存指针变量的地址值 (3)指针是个变量,同样也存在传值调用与传址调用 重置动态空间的大小 #includ ...
- js-tree坑
今天遇到一个js坑,一个页面,有两棵树,用同一个套参数初始化的,,,,当选择完另一个棵树之后,再操作另一颗树,不选择树节点,就会有错误出现,,,
- 【259】ucpole.dat update
2017年2月21日 57871 +0.020896 0.007232 +0.414732 0.009212 +0.418044 0.007533 p 57872 +0.022055 0.007284 ...
- 百度地图SDK v2.1.2使用方法
1.开发工具 Android开发工具有很多,开发者可根据自己的喜好进行选择.在此,我们推荐开发者使用Eclipse作为自己的开发工具,本套开发指南也是针对Eclipse开发环境下进行编写的. 2.工程 ...
- sql中IN的用法
1.和where配合使用 IN操作符允许我们在where的子句中规定多个值 SELECT * FROM Persons WHERE LastName IN ('Adams','Carter') 这句 ...
- 登陆Oracle出现错误java.lang.exception
出现错误时登录企业管理器时出现的界面 出现这种错误一般是因为没有设置时区,一般默认的是agentTZRegion=GMT,也就是GMT.所以大家只要设置了这个东西,然后重新启动dbconsole就可以 ...
- VS调试程序时,程序出现异常,但VS不报错的解决方案
在调试>异常> 里面把勾全勾上就行了!
- C++面向对象类的实例题目四
题目描述: 以面向对象的概念设计一个类,此类包含3个私有数据:unlead.lead(无铅汽油和有铅汽油)以及total(当天总收入,无铅汽油的价格是17元/升,有铅汽油的加个是16元/升),请以构造 ...
- 21、conda下载,安装,卸载
参考:https://www.cnblogs.com/Datapotumas/p/6293309.html 1.下载 conda下载网址:https://conda.io/miniconda.html ...