V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  Buffer2Disk  ›  全部回复第 3 页 / 共 13 页
回复总数  260
1  2  3  4  5  6  7  8  9  10 ... 13  
2019-08-07 16:27:14 +08:00
回复了 Buffer2Disk 创建的主题 程序员 关于.NET 的编译版本的问题
@ian19znj 如果我的电脑上装了 4.5.1 的 SDK, 客户的机器上装的是 4.0 的 framework,这种是能运行起来的嘛?

因为我看微软官方好像压根没提供 4.0 的开发包
https://dotnet.microsoft.com/download/visual-studio-sdks
别问,问就是 jb 全家桶 一把梭
2019-08-02 10:15:33 +08:00
回复了 Buffer2Disk 创建的主题 程序员 多线程操作 redis 会有并发问题嘛?
@kppwp 注意审题哈,这里其实跟 redis 其实没啥关系, 是我操作 jedis 的去连接 redis 的方式不对,

导致并发场景下,向 redis 发送请求的数据被污染了
2019-08-01 21:13:12 +08:00
回复了 Buffer2Disk 创建的主题 程序员 多线程操作 redis 会有并发问题嘛?
@Jrue0011

我明白了,是我自己傻逼了,测试的这个新方法没去释放连接,应该没问题了

我看楼上他们说用 lettuce 这个玩意,内部用了 netty,可以复用连接

不知道大佬你用过没有?有没有坑啊
2019-08-01 21:08:03 +08:00
回复了 Buffer2Disk 创建的主题 程序员 多线程操作 redis 会有并发问题嘛?
@Jrue0011 我设置了 maxWaitMillis 为 2 秒,当到达 maxTotal 2 秒后,抛出了这个错误

edis.clients.jedis.exceptions.JedisException: Could not get a resource from the pool

说明确实拿不到新的实例了,那么为啥没释放回去呢。。。。
2019-08-01 20:51:55 +08:00
回复了 Buffer2Disk 创建的主题 程序员 多线程操作 redis 会有并发问题嘛?
@Jrue0011 但是我测试以后,这个阻塞的上限确实是一直跟着 maxTotal 变化的,给人的感觉就像是用完以后没有释放回连接池里面一样。。。。但是你看我上面的代码,调用 get(key) 后确实 finally 里面 close()了
2019-08-01 18:13:50 +08:00
回复了 Buffer2Disk 创建的主题 程序员 多线程操作 redis 会有并发问题嘛?
@leafre 注意审题啊,我用的就是 jedisPool,只不过现在查出来是我的用法不太对
2019-08-01 18:01:41 +08:00
回复了 Buffer2Disk 创建的主题 程序员 多线程操作 redis 会有并发问题嘛?
@Jrue0011 我看到有个 maxWaitMillis
当资源池连接用尽后,调用者的最大等待时间(单位为毫秒),默认值 -1:表示永不超时

有没有什么参数可以控制 close 后,多久返回连接池的。,。。。

/**
* 获取 Jedis 实例
*
* @return Jedis
*/
public static Jedis getJedis() {
poolInit();
Jedis jedis = null;
try {
if (jedisPool != null) {
jedis = jedisPool.getResource();
}
} catch (Exception e) {
logger.error("get jedis error", e);
returnResource(jedis);
logger.debug("<---jedis return resource--->");
}
return jedis;
}


public static String get(String key) {
Jedis jedis = null;
try {
jedis = getJedis();
return jedis.get(key);
} catch (Exception ex) {
logger.error("redis get error", ex);
} finally {
returnResource(jedis);
}
return null;
}

/**
* 释放 jedis 资源
*
* @param jedis
*/
public static void returnResource(final Jedis jedis) {
if (jedis != null) {
jedis.close();
}
}
2019-08-01 17:56:16 +08:00
回复了 Buffer2Disk 创建的主题 程序员 多线程操作 redis 会有并发问题嘛?
@Jrue0011 改了以后确实可以了,有一个问题就是,jedis close() 后难道不是立马就释放回连接池的嘛?

我试了下循环一百次 get 操作,很容易就触发到 maxTotal 的阈值了,然后程序就一直 hang 在那里,像是在等待连接池释放新的连接出来一样,但是等了很久也没有出来,这个是有什么参数可以控制的么
2019-08-01 16:55:54 +08:00
回复了 Buffer2Disk 创建的主题 程序员 多线程操作 redis 会有并发问题嘛?
@Jrue0011 大佬,为什么拿到相同的 jedis,使用的 key 是不同的,为什么会拿到别的 key 的结果呢?
2019-08-01 16:54:35 +08:00
回复了 Buffer2Disk 创建的主题 程序员 多线程操作 redis 会有并发问题嘛?
知道
@jorneyr 尴尬,应该是
public static Jedis getJedis() {
poolInit();
Jedis jedis = null;
try {
if (jedisPool != null) {
jedis = jedisPool.getResource();
}
} catch (Exception e) {
logger.error("get jedis error", e);
returnResource(jedis);
logger.debug("<---jedis return resource--->");
}
return jedis;
}
2019-08-01 16:19:09 +08:00
回复了 Buffer2Disk 创建的主题 程序员 多线程操作 redis 会有并发问题嘛?
@cheng6563
我看网上说直接使用 jedis 是线程不安全的,但是使用 JedisPool 是线程安全的,
我使用的就是 jedisPool 来获取 jedis 实例



Jedis 不是线程安全的,故不应该在多线程环境中共用一个 Jedis 实例。但是,也应该避免直接创建多个 Jedis 实例,因为这种做法会导致创建过多的 socket 连接,性能不高。
要保证线程安全且获得较好的性能,可以使用 JedisPool。JedisPool 是一个连接池,既可以保证线程安全,又可以保证了较高的效率。
可以声明一个全局的 JedisPool 变量来保存 JedisPool 对象的引用,然后在其他地方使用。要知道,JedisPool 是一个线程安全的连接池。
2019-08-01 16:14:51 +08:00
回复了 Buffer2Disk 创建的主题 程序员 多线程操作 redis 会有并发问题嘛?
@msg7086 还有复用同一个网络连接这么一说
2019-08-01 16:13:02 +08:00
回复了 Buffer2Disk 创建的主题 程序员 多线程操作 redis 会有并发问题嘛?
@rrfeng
@arrow8899
@ke1e

private static void initialPool() {
ApplicationContext applicationContext =
new FileSystemXmlApplicationContext("classpath:config/spring-application-redis.xml");
jedisPool = (JedisPool) applicationContext.getBean("jedisPool");
logger.info("<---jedis pool init--->");
}

/**
* 初始化,加锁防止被多次初始化 pool
*/
private synchronized static void poolInit() {
if (jedisPool == null) {
initialPool();
}
}

/**
* 获取 Jedis 实例
*
* @return Jedis
*/
public static Jedis getJedis() {
poolInit();
Jedis jedis = null;
try {
if (jedisPool != null) {
jedis = jedisPool.getResource();
}
} catch (Exception e) {
logger.error("get jedis error",e);
} finally {
returnResource(jedis);
logger.debug("<---jedis return resource--->");
}
return jedis;
}


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


public static String get(String key) {
try {
return getJedis().get(key);
} catch (Exception ex) {
logger.error("redis get error",ex);
}
return null;
}


public static String lpop(String key) {
try {
return getJedis().lpop(key);
} catch (Exception ex) {
logger.error("lpop error , key = {}", key, ex);
}
return null;
}
2019-08-01 15:50:32 +08:00
回复了 Buffer2Disk 创建的主题 程序员 多线程操作 redis 会有并发问题嘛?
抽风了, 使用的 key 是上面这种格式的
2019-08-01 15:49:57 +08:00
回复了 Buffer2Disk 创建的主题 程序员 多线程操作 redis 会有并发问题嘛?
使用的可以是这种格式的

keyA queue:test

keyB data:overload:user
2019-07-25 11:25:01 +08:00
回复了 Buffer2Disk 创建的主题 问与答 vmware 里面装了黑苹果的虚拟机,为啥一直闪屏呢?
@ebony0319 请问是设置哪里啊?
2019-07-25 11:01:04 +08:00
回复了 Buffer2Disk 创建的主题 问与答 vmware 里面装了黑苹果的虚拟机,为啥一直闪屏呢?
@sleepm 是配置 vmware 的,还是配置 mac 里面的参数啊?
2019-07-22 16:00:13 +08:00
回复了 Buffer2Disk 创建的主题 问与答 有没有耳朵经常奇痒的朋友?(可能是湿疹?)
@xiaojj 请问 糠酸莫米松乳膏 有没有啥其他副作用啊? 之前外耳道涂了掉皮以后,我就不敢再涂了
2019-07-17 18:31:02 +08:00
回复了 Buffer2Disk 创建的主题 程序员 Python 和 Go 在循环时候的性能对比
@neoblackcap 没有啊,golang 里面的 list 就是双向链表实现的 = =
1  2  3  4  5  6  7  8  9  10 ... 13  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2764 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 19ms · UTC 14:47 · PVG 22:47 · LAX 07:47 · JFK 10:47
Developed with CodeLauncher
♥ Do have faith in what you're doing.