- 浏览: 572915 次
- 性别:
- 来自: 杭州
-
文章分类
- 全部博客 (478)
- lucene (45)
- oracle (19)
- nutch (2)
- blog (2)
- 垂直搜索 (19)
- java综合 (89)
- spring (15)
- Hibernate (9)
- Struts (9)
- Hadoop (16)
- Mysql (12)
- nosql (10)
- Linux (3)
- MyEclipse (4)
- Ant (1)
- 设计模式 (19)
- JBPM (1)
- JSP (1)
- HtmlParser (5)
- SVN (2)
- 插件 (2)
- 收藏 (7)
- Others (1)
- Heritrix (18)
- Solr (4)
- 主题爬虫 (31)
- 内存数据库 (24)
- 分布式与海量数据 (32)
- httpclient (14)
- Tomcat (1)
- 面试宝典 (6)
- Python (14)
- 数据挖掘 (1)
- 算法 (6)
- 其他 (4)
- JVM (12)
- Redis (18)
最新评论
-
hanjiyun:
本人水平还有待提高,进步空间很大,看这些文章给我有很大的指导作 ...
JVM的内存管理 Ⅲ -
liuxinglanyue:
四年后的自己:这种方法 不靠谱。 使用javaagent的方式 ...
计算Java对象占用内存空间的大小(对于32位虚拟机而言) -
jaysoncn:
附件在哪里啊test.NoCertificationHttps ...
使用HttpClient过程中常见的一些问题 -
231fuchenxi:
你好,有redis,memlink,mysql的测试代码吗?可 ...
MemLink 性能测试 -
guyue1015:
[color=orange][/color][size=lar ...
JAVA同步机制
#Get going with JRedis - here's how:
Introduction
So how do you use JRedis? Pull the code (r16) or download from github.
Details
JRedis is a specification and a reference implementation. Currently there is one implementation providing (blocking semantics on method calls) for a passive client (that uses the caller's thread to do its job).
This initial client can not be shared across threads, but you can certainly either put it behind a synchronized gate, or, fire up a whole bunch for each one of your threads, as you prefer.
If you do share an instance from behind a facade, do note that redis connections are stateful, and if you plan on using the facility to switch between dbs using jredis.select(db) SELECT db it is almost guaranteed to be bad idea to share a single connection across multiple threads. However, if you will not be using select, then there should be no problems with sharing a single connection from behind a facade. If switching dbs is required, then you will need to create dedicated JRedis instances per thread. (This is very much a server issue and not JRedis specific.)
Alright, that said, here is a barebones JRedis app -- HelloAgain:
package org.jredis.examples; import org.jredis.ClientRuntimeException; import org.jredis.Command; import org.jredis.JRedis; import org.jredis.RedisException; import org.jredis.connector.ProviderException; import org.jredis.ri.alphazero.JRedisClient; import org.jredis.ri.alphazero.support.Encode; /** * Note this program will set a (hopefully non-coliding!) key in your DB 13. * * @author Joubin Houshyar * */ public class HelloAgain { public static final String key = "jredis::examples::HelloAgain::message"; public static void main(String[] args) { String password = ""; if(args.length > 0) password = args[0]; new HelloAgain().run(password); } private void run(String password) { try { JRedis jredis = new JRedisClient(); if(!password.equals("")) jredis.auth(password); jredis.ping().select(13); if(!jredis.exists(key)) { jredis.set(key, "Hello Again!"); System.out.format("Hello! You should run me again!\n"); return; } String msg = Encode.toStr ( jredis.get(key) ); System.out.format("%s\n", msg); } catch (RedisException error){ if (error.getCommand()==Command.PING){ System.out.format("I'll need that password! Try again with password as command line arg for this program.\n"); } } catch (ProviderException bug){ System.out.format("Oh no, an 'un-documented feature': %s\nKindly report it.", bug.getMessage()); } catch (ClientRuntimeException problem){ System.out.format("%s\n", problem.getMessage()); } } }
The essentials:
1) Get a connection implementing JRedis interface. (You'll want to code to this interface to minimize the impact of changes behind the scene) like this: 2) Do you have a requirepass jredis in your 'redis.conf' ? Then do this: Want to bind a value to a key (map semantics)? Use the Redis 'String' commands: What can 'myKey' be? Any java.lang.String value that does not contain \r, \n, and space. Other than that, Redis and JRedis support UTF-8 keys: JRedis is to the metal. So you can pass byte[]. In fact, if you are after high performance, you'll want to avoid passing java.lang.String, unless that is precisely what you want stored. Redis itself will accept anything for the value. You can pass up to 1MB of \r\n or zeros, if you feel like it. Its a blob. So, do you have a Java (Serializable) object you want to add as a member of a set? Here is how: So, to repeat, Redis treats values as blobs, just byte[]s, so JRedis api reflects that and returns either byte[] or List<byte[]> (for set and list ops). So, to help out there is (as of r16 but this will be improved so remember this bit is in flux), Encode. Here's how we get our objects back using Encode.decode(byte[] bytes), which which have imported using import static to make things easier: byte[]s go in, and byte[]s come out. If you want to convert to Number and String, check out the methods in DefaultCodec class. And its as simple as that. /Enjoy! JRedis jredis = new JRedisClient();
jredis.auth(password);
3) Use the JRedis api, which is an analog of the Redis command set.
jredis.set(myKey, myValue);
String asciiKey = "ascii-key";
String utf8key_Russian = "фывапро";
String utf8key_Chinese = "漢字[汉字]";
String utf8key_Persian = "مهندس";
String variousKeys[] = {asciiKey, utf8key_Russian, utf8key_Chinese, utf8key_Persian};
String value = "some data";
for(String key : variousKeys){
System.out.format("using %s as key for SET ...", key);
redis.set(key, value);
System.out.format("...and we get:\n\t %s => '%s'\n", key, value);
}
What can 'myValue' be?
// lets make a 100 SimpleBean instances and add them to our
// 'object_set' key (which is a Redis SET)
int objcnt = 100;
System.out.format ("Creating and saving %d Java objects to redis ...", objcnt);
for(int i=1; i<objcnt; i++){
// instance it
SimpleBean obj = new SimpleBean ("bean #" + i);
// get the next available object id from our Redis counter using INCR command
int id = redis.incr("SimpleBean::next_id")
// we can bind it a unique key using map (Redis "String") semantics now
String key = "objects::SimpleBean::" + id;
// voila: java object db
redis.set(key, obj);
// and lets add it to this set too since this is so much fun
redis.sadd("object_set", obj);
}
System.out.format (" and done.\n");
And how do I get my values back to proper types?
// lets get all those objects in that object set
// (Remember: JRedis is NOT maintaining a type system for you, so
// if you have other kinds of blobs in that set, the object stream is not going to like it
List<SimpleBean> members = decode (redis.smembers("object_set"));
for(SimpleBean obj : members) {
System.out.format("a member of 'object-set' => %s\n", obj.toString());
}
And there you are.
发表评论
-
Redis: under the hood(收藏)
2011-01-03 10:54 1165Redis: under the hood How ... -
Redis指令文档(非常有用的)
2011-01-01 15:32 1652连接控制QUIT 关闭连接AUTH (仅限启用时)简单的密 ... -
Webdis – 为 Redis 提供 HTTP 接口
2010-12-31 09:24 2110Redis 一直以来只提供纯文本操作协议(只有在 C ... -
Redis几个认识误区
2010-12-05 09:25 1083来自timyang的博客:Redi ... -
Redis tutorial, April 2010
2010-12-01 13:38 1372文章太长了,下面是其中的一小部分 转:http://simo ... -
redis常用命令
2010-12-01 13:22 21311、redis-benchmark redis基准信息,red ... -
使用Jredis做的小例子(入门级)
2010-11-30 16:02 5876redis入门级例子: package com. ... -
Redis命令总结
2010-11-30 13:03 822Redis提供了丰富的命令(command)对 ... -
Redis, from the Ground Up
2010-11-30 10:58 802Redis, from the Ground Up A ... -
Redis, from the Ground Up(4)
2010-11-30 10:57 936Redis Virtual Memory The go ... -
Redis, from the Ground Up(3)
2010-11-30 10:56 1055Expiry The EXPIRE command e ... -
Redis, from the Ground Up(2)
2010-11-30 10:55 692Key Disadvantages Redis req ... -
Redis, from the Ground Up(1)
2010-11-30 10:52 858A deep dive into Redis' orig ... -
深入Redis,读redis-from-the-ground-up有感(转)
2010-11-30 10:50 1163上有一篇介绍Redis的文章,由浅入深地讲解了Redis: ... -
键值数据库—Redis(一) 基础入门
2010-11-29 21:46 1558Redis的知识准备 redis的基础介绍:http:/ ... -
Redis配置文件redis.conf参数解读
2010-11-29 20:43 1887转:http://blog.csdn.net/Java2K ... -
linux下redis的安装
2010-11-29 20:41 1025源地址:http://hanqunfeng.iteye.c ...
相关推荐
scratch少儿编程逻辑思维游戏源码-城堡战争.zip
内容概要:本文档汇集了来自字节跳动、腾讯、金山WPS、跟谁学和百度等大厂的Go工程师面试题,涵盖广泛的技术领域。主要包括Go语言特性(如goroutine调度、channel机制)、操作系统(进程间通信、线程调度)、计算机网络(TCP/IP协议栈、HTTP协议)、数据结构与算法(排序算法、LRU缓存)、数据库(MySQL索引优化、Redis内部机制)、分布式系统(负载均衡、服务发现)等方面的知识点。通过这些问题,不仅考察应聘者的理论基础,还测试其实际项目经验和技术深度。 适合人群:有一定Go语言编程经验和计算机基础知识的开发者,特别是准备应聘互联网大厂的中级及以上水平的后端工程师或全栈工程师。 使用场景及目标:①帮助求职者全面复习Go语言及其相关领域的核心概念;②为面试官提供有价值的参考题目,确保候选人具备解决复杂问题的能力;③指导工程师深入理解并掌握企业级应用开发所需的关键技能。 阅读建议:由于题目覆盖面广且难度较高,建议读者结合自身情况选择重点复习方向,同时配合实际编码练习加深理解。对于每个知识点,不仅要记住答案,更要理解背后的原理,这样才能在面试中灵活应对各种变体问题。
scratch少儿编程逻辑思维游戏源码-堡垒之夜(吃鸡游戏).zip
少儿编程scratch项目源代码文件案例素材-派.zip
scratch少儿编程逻辑思维游戏源码-Scratch 冒险.zip
2025 飞特舵机, Arduino版本
scratch少儿编程逻辑思维游戏源码-躲避.zip
内容概要:本文详细介绍了利用PFC5.0进行纤维混凝土三点弯曲模拟的方法。首先,作者展示了如何通过定义纤维的体积含量、长度、半径和刚度等关键参数来构建纤维网络。接着,描述了三点弯曲加载的具体实现方式,包括加载速率控制和终止条件设定。最后,提供了后处理方法,如绘制并导出力-位移曲线图,以便于分析材料破坏机制。文中还给出了若干实用建议,如纤维半径的选择范围、加载速率的初始值以及不同类型纤维的接触模型选择。 适合人群:从事材料科学尤其是混凝土材料研究的专业人士,以及对离散元法和数值模拟感兴趣的科研工作者。 使用场景及目标:适用于希望深入了解纤维混凝土力学性能的研究人员,旨在帮助他们掌握PFC5.0软件的操作技巧,优化模拟参数设置,提高实验效率。 其他说明:文中提供的代码片段可以直接应用于实际项目中,同时附带了一些实践经验分享,有助于初学者快速入门并避免常见错误。
少儿编程scratch项目源代码文件案例素材-生存V1(有BAG).zip
少儿编程scratch项目源代码文件案例素材-披萨机器人.zip
少儿编程scratch项目源代码文件案例素材-气球滑雪板.zip
少儿编程scratch项目源代码文件案例素材-使命召唤(苏联插旗).zip
1. GPIO模拟I2C 实战项目,根据正点原子 STM32F407ZGT6 进行更改; 2. 可适配STM32、GD32、HC32等MCU;
scratch少儿编程逻辑思维游戏源码-百米冲刺.zip
内容概要:本文档汇总了蓝桥杯历年试题及练习资源,涵盖编程类试题精选、硬件与单片机试题、练习资源与题库以及备考建议。编程类试题精选包括基础算法题(如数组求和、质因数分解)、经典算法案例(如最大子序列和、兰顿蚂蚁模拟)和数据结构应用(如字符全排列)。硬件与单片机试题主要涉及客观题考点,如BUCK电路和电源设计。练习资源与题库部分介绍了真题平台(如Dotcpp、CSDN专题)和专项训练包(如Python题库、Java百题集、C++真题解析)。备考建议分为分阶段练习(新手阶段、进阶提升)和模拟实战(如使用Dotcpp估分系统进行限时训练),强调按年份和组别分类练习,强化代码实现与调试能力。; 适合人群:准备参加蓝桥杯竞赛的学生及编程爱好者。; 使用场景及目标:①针对不同编程语言和难度级别的题目进行专项训练;②通过历年真题和模拟实战提高解题速度和准确性;③掌握算法设计、数据结构应用及硬件基础知识。; 阅读建议:此文档提供了丰富的试题和练习资源,建议根据自身水平选择合适的题目进行练习,并结合真题平台的估分系统和社区开源代码进行对比优化,逐步提升编程能力和竞赛水平。
内容概要:本文详细介绍了30kW储能PCS(电力转换系统)原理图的设计要点及其量产化过程中需要注意的技术细节。首先阐述了储能PCS的基本概念和重要性,接着深入探讨了主拓扑结构的选择,特别是双级式结构的优势以及关键组件如IGBT的驱动时序配置。随后讨论了控制算法的智能化改进,包括加入前馈补偿以提高系统的稳定性。此外,还强调了EMC设计、PCB布局、元件选择等方面的注意事项,并分享了一些实际生产中遇到的问题及解决方案。最后提到了自动化测试方法和散热管理策略,确保产品在各种环境下的可靠运行。 适合人群:从事储能系统设计、电力电子产品研发的工程师和技术人员。 使用场景及目标:帮助读者掌握30kW储能PCS从原理图设计到量产实施的全流程关键技术,提升产品的性能和可靠性,避免常见错误。 其他说明:文中提供了具体的代码片段和实践经验,有助于理解和应用相关理论。
少儿编程scratch项目源代码文件案例素材-喷气包多德.zip
内容概要:本文深入探讨了齿轮啮合性能及其动态特性,特别是直齿轮的基础参数计算、渐开线绘制以及接触力仿真的具体实现。首先介绍了齿轮的基本参数如模数、齿数、压力角等,并给出了具体的计算实例。接着详细讲解了如何利用Python进行渐开线的数学建模并绘图展示,强调了这种曲线对于确保齿轮平稳传动的重要性。然后讨论了齿轮在啮合过程中接触力的变化规律,提供了简化的Python代码来模拟这一现象。最后指出,在实际工程项目中应当借助专业的软件包如PyDy或ADAMS来进行更加精确的动力学分析,同时肯定了自行编写代码的价值在于能够更好地理解和排查问题。 适合人群:机械工程领域的研究人员、工程师以及相关专业的学生。 使用场景及目标:①帮助读者掌握齿轮基本理论知识;②指导读者运用Python编程技能完成简单的齿轮性能分析任务;③为后续深入研究提供思路和技术支持。 阅读建议:由于文中涉及较多的专业术语和数学公式,建议读者提前复习相关基础知识,并尝试运行提供的代码片段加深理解。此外,对于想要进一步探索该领域的读者来说,可以参考文末提到的专业工具包进行更复杂的研究。
少儿编程scratch项目源代码文件案例素材-任务.zip
少儿编程scratch项目源代码文件案例素材-时光大盗.zip