设为首页 收藏本站
查看: 507|回复: 0

[经验分享] java操作redis redis的事务

[复制链接]

尚未签到

发表于 2016-12-17 11:15:00 | 显示全部楼层 |阅读模式
  1 添加mavcen依赖:

1 pom.xml中增加依赖:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.4.2</version>
</dependency>
  2 redis java客户端连接工具 jedis
  连接配置参数含义简介:

//控制一个pool最多有多少个状态为idle(空闲的)的jedis实例。  
poolConfig.setMaxIdle(10);
//控制一个pool最多有多少个jedis实例。  
poolConfig.setMaxTotal(100);
//表示当borrow(引入)一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException;
poolConfig.setMaxWaitMillis(10000);
//在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;
poolConfig.setTestOnBorrow(true);

  3 连接方式:
  单机单连接方式
单机连接池方式
多机分布式连接池方式
  代码如下:

import java.util.ArrayList;
import java.util.List;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;
public class TestJedis {
String host = "192.168.1.170";
int port = 6379;
/**
* 单机模式
*/
@Test
public void testSet() {
Jedis jedis = new Jedis(host, port);
String result = jedis.set("name", "zm");
System.out.println(result);
jedis.close();
}
@Test
public void testGet(){
Jedis jedis = new Jedis(host, port);
String value = jedis.get("name");
System.out.println(value);
jedis.close();
}

/**
* 单机链接池
*/
@Test
public void testpool(){
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(100);
poolConfig.setMaxIdle(10);
poolConfig.setMaxWaitMillis(5000);
poolConfig.setTestOnBorrow(true);
JedisPool jedisPool = new JedisPool(poolConfig, host,port);
Jedis jedis = jedisPool.getResource();
String value = jedis.get("name");
System.err.println(value+"_____pool");
jedisPool.returnResource(jedis);
}
// 连接redis集群
@Test
public void testmorePool(){
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(100);
poolConfig.setMaxIdle(10);
poolConfig.setMaxWaitMillis(5000);
poolConfig.setTestOnBorrow(true);
List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();
shards.add(new JedisShardInfo(host, port));
/*shards.add(new JedisShardInfo(host, port)); // redis集群机器1 端口1
shards.add(new JedisShardInfo(host, port)); // redis集群机器2 端口2
shards.add(new JedisShardInfo(host, port));*/ // redis集群机器3 端口3
ShardedJedisPool shardedJedisPool = new ShardedJedisPool(poolConfig, shards);
ShardedJedis jedis = shardedJedisPool.getResource();
String value = jedis.get("crxy");
System.out.println(value+"_______morepool");
shardedJedisPool.returnResource(jedis);
}



}
  2 事务:
  2.1)redis的事务(transaction)
  redis中的事务是一组命令的集合。事务同命令一样都是redis的最小执行单元。
原理:先将属于一个事务的命令发送给redis,然后再让redis依次执行这些命令,要么都执行,要么都不执行。
  应用场景
一组命令必须同时都执行,或者都不执行。
我们想要保证一组命令在执行的过程之中不被其它命令插入。
  2.2)命令写法
multi 事务开始
set name zm
set name xin
exec 事务结束,开始执行事务中的命令    如果执行 discard 则放弃事务
  2.3)
  错误处理
1:语法错误:致命的错误,事务中的所有命令都不会执行
2:运行错误:不会影响事务中其他命令的执行(比如 用错误的命令来操作错误的数据类型),但是那条运行错误的命令讲不会被执行,也更不会回滚
  Redis 不支持回滚(roll back)
因为不需要对回滚进行支持,所以redis的内部才可以保持简单且快速
  
2.4)watch命令
作用:监控一个或者多个键,当被监控的键值被修改后阻止之后的一个事务的执行。
但是不能保证其它客户端不修改这一键值,所以我们需要在事务执行失败后重新执行事务中的命令。
注意:执行完事务的exec命令之后,watch就会取消对所有键值的监控
unwatch:取消监控

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-315529-1-1.html 上篇帖子: redis(一)-概念 下篇帖子: java操作redis redis的事务
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表