- 浏览: 565030 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (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 1144Redis: under the hood How ... -
Redis指令文档(非常有用的)
2011-01-01 15:32 1638连接控制QUIT 关闭连接AUTH (仅限启用时)简单的密 ... -
Webdis – 为 Redis 提供 HTTP 接口
2010-12-31 09:24 2093Redis 一直以来只提供纯文本操作协议(只有在 C ... -
Redis几个认识误区
2010-12-05 09:25 1071来自timyang的博客:Redi ... -
Redis tutorial, April 2010
2010-12-01 13:38 1358文章太长了,下面是其中的一小部分 转:http://simo ... -
redis常用命令
2010-12-01 13:22 21191、redis-benchmark redis基准信息,red ... -
使用Jredis做的小例子(入门级)
2010-11-30 16:02 5857redis入门级例子: package com. ... -
Redis命令总结
2010-11-30 13:03 807Redis提供了丰富的命令(command)对 ... -
Redis, from the Ground Up
2010-11-30 10:58 791Redis, from the Ground Up A ... -
Redis, from the Ground Up(4)
2010-11-30 10:57 924Redis Virtual Memory The go ... -
Redis, from the Ground Up(3)
2010-11-30 10:56 1046Expiry The EXPIRE command e ... -
Redis, from the Ground Up(2)
2010-11-30 10:55 681Key Disadvantages Redis req ... -
Redis, from the Ground Up(1)
2010-11-30 10:52 838A deep dive into Redis' orig ... -
深入Redis,读redis-from-the-ground-up有感(转)
2010-11-30 10:50 1146上有一篇介绍Redis的文章,由浅入深地讲解了Redis: ... -
键值数据库—Redis(一) 基础入门
2010-11-29 21:46 1531Redis的知识准备 redis的基础介绍:http:/ ... -
Redis配置文件redis.conf参数解读
2010-11-29 20:43 1873转:http://blog.csdn.net/Java2K ... -
linux下redis的安装
2010-11-29 20:41 1009源地址:http://hanqunfeng.iteye.c ...
相关推荐
labview程序代码参考学习使用,希望对你有所帮助。
毕设和企业适用springboot生鲜鲜花类及数据处理平台源码+论文+视频.zip
毕设和企业适用springboot企业数据智能分析平台类及汽车管理平台源码+论文+视频
毕设和企业适用springboot社区物业类及企业创新研发平台源码+论文+视频
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Floating Text Example</title> <style> .floating-text { font-size: 24px; position: relative; animation: float 3s ease-in-out infinite; } @keyframes float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-20px); } } </style> </head> <body> <div class="floating-text">Hello, I'm floating!</div> <script> document.addEventListener('DOMContentLoaded', function() {
毕设和企业适用springboot社交媒体分析平台类及智慧医疗管理平台源码+论文+视频
毕设和企业适用springboot生鲜鲜花类及餐饮管理平台源码+论文+视频
毕设和企业适用springboot人工智能客服系统类及用户行为分析平台源码+论文+视频
毕设和企业适用springboot全渠道电商平台类及个性化广告平台源码+论文+视频
毕设和企业适用springboot社交互动平台类及线上图书馆源码+论文+视频
毕设和企业适用springboot企业知识管理平台类及供应链优化平台源码+论文+视频
毕设和企业适用springboot企业健康管理平台类及数据处理平台源码+论文+视频.zip
内容概要:本文档是一份面向初学者的详细指南,重点介绍如何利用Vue.js 2.0快速创建和运行简单的Todo List应用。首先指导安装必需的Node.js、npm/yarn等环境准备,接着通过Vue CLI工具生成新的Vue项目,再详细介绍项目目录和组件的构建方式。最后提供了具体的方法实现添加和删除待办事项,并指导如何使用命令启动应用,查看结果。 适合人群:具备基础Web开发技能的前端开发新手,尤其是对Vue框架感兴趣的学习者。 使用场景及目标:作为初学者入门级的学习资料,本文档的目标是让读者能够在最短时间内掌握Vue.js的基础概念和技术栈的应用方式,以便日后可以独立地构建更加复杂的Vue应用。 其他说明:除了学习如何构建应用程序之外,本文档还涵盖了Vue的基本语法和数据绑定、事件处理机制等重要概念,对于理解Vue框架的工作原理十分有帮助。
毕设和企业适用springboot企业健康管理平台类及智能化系统源码+论文+视频.zip
毕设和企业适用springboot企业健康管理平台类及远程医疗平台源码+论文+视频.zip
毕设和企业适用springboot数据可视化类及数据智能化平台源码+论文+视频
毕设和企业适用springboot生鲜鲜花类及用户体验优化平台源码+论文+视频.zip
毕设和企业适用springboot人工智能客服系统类及虚拟银行平台源码+论文+视频
毕设和企业适用springboot社交应用平台类及云计算资源管理平台源码+论文+视频
毕设和企业适用springboot企业数据监控平台类及线上图书馆源码+论文+视频