`
knight_black_bob
  • 浏览: 853429 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

redis学习 jedis 类图及源码分析

阅读更多

redis 学习

 

 

查看 别人的类图 引用别人的链接:http://yychao.iteye.com/blog/1751583 可以对比一下,感觉不对,就自己画了一个

不对请指示(留言)

 



 

...........

 

Keyoperation
jedis.flushDB() 清空库中所有数据
Set<String> keys = jedis.keys("*"); 获取所有的key
jedis.del("key002") 系统中删除key002
jedis.exists("key002")) 判断key002是否存在
jedis.expire("key001", 5)设置 key001的过期时间为5秒
jedis.ttl("key001")) 查看key001的剩余生存时间
jedis.persist("key001"))移除key001的生存时间
jedis.type("key001")) 查看key所储存的值的类型
jedis.rename("key6", "key0")修改键名
jedis.move("foo", 1) 将当前db的key移动到给定的db当中

 

Stringoperation
jedis.set("key001", "value001") 赋key001值
jedis.get("key001") 取key001值
jedis.del("key001") 删除key001
jedis.append("key001", "+appendString") 在key002原来值后面追加
jedis.mset("key201", "value201", "key202", "value202", "key203", "value203", "key204", "value204"))
一次性新增key201,key202,key203,key204及其对应值
jedis.mget("key201", "key202", "key203", "key204"))
一次性获取key201,key202,key203,key204各自对应的值
jedis.del(new String[] { "key201", "key202" })
一次性删除key201,key202

 

listoperatoin
jedis.lpush("stringlists", "vector");
jedis.lpush("stringlists", "vector");
jedis.lpush("stringlists", "ArrayList"); 一次性添加list
jedis.lrange("stringlists", 0, -1) 所有元素-stringlists
jedis.lrem("stringlists", 2, "vector"))
删除列表指定的值 ,第二个参数为删除的个数(有重复时),后add进去的值先被删,类似于出栈
jedis.ltrim("stringlists", 0, 3)
删除下标0-3区间之外的元素
jedis.lpop("stringlists") 列表元素出栈
jedis.lset("stringlists", 0, "hello list!") 修改列表中指定下标的值
jedis.llen("stringlists") 长度-stringlists
/*
* list中存字符串时必须指定参数为alpha,如果不使用SortingParams,而是直接使用sort("list"),
* 会出现"ERR One or more scores can't be converted into double"
*/
SortingParams sortingParameters = new SortingParams();
sortingParameters.alpha();
sortingParameters.limit(0, 3);
jedis.sort("stringlists", sortingParameters)) 排序后的结果-stringlists
jedis.lindex("stringlists", 2) 获取下标为2的元素

 

SetOperate
jedis.sadd("sets", "element001"))
jedis.sadd("sets", "element002"))
jedis.sadd("sets", "element003")) 一次性添加set
jedis.smembers("sets")查看sets集合中的所有元素
jedis.srem("sets", "element003"))集合sets中删除元素element003
jedis.spop("sets")) sets集合中任意位置的元素出栈 出栈元素位置居然不定
jedis.sismember("sets", "element001")) 判断element001是否在集合sets中
Set<String> set = jedis.smembers("sets");
Iterator<String> it = set.iterator();
while (it.hasNext())
{Object obj = it.next();
System.out.println(obj);} 循环查询获取sets中的每个元素
jedis.sadd("sets1", "element001"))
jedis.sadd("sets1", "element002"))
jedis.sadd("sets1", "element003"))一次性添加set
jedis.sinter("sets1", "sets2"))sets1和sets2交集
jedis.sunion("sets1", "sets2"))sets1和sets2并集
jedis.sdiff("sets1", "sets2"))sets1和sets2差集

 

SortedSetOperate
jedis.zadd("zset", 7.0, "element001"))
jedis.zadd("zset", 8.0, "element002"))
jedis.zadd("zset", 2.0, "element003"))
jedis.zadd("zset", 3.0, "element004")) zset中添加元素
jedis.zrange("zset", 0, -1)) 按照权重值排序
jedis.zrem("zset", "element002")) zset中删除元素element002
jedis.zcard("zset")统计zset集合中的元素中个数
jedis.zscore("zset", "element004"))查看zset集合中element004的权重
jedis.zcount("zset", 1.0, 5.0)统计zset集合中权重某个范围内(1.0——5.0),元素的个数
jedis.zrange("zset", 1, 2))查看下标1到2范围内的元素值

 

HashOperate
jedis.hset("hashs", "key001", "value001")) hashs中添加key001和value001键值对
jedis.hset("hashs", "key002", "value002"))
jedis.hset("hashs", "key003", "value003"))
jedis.hincrBy("hashs", "key004", 4l))新增key004和4的整型键值对
jedis.hvals("hashs")hashs中的所有值
jedis.hdel("hashs", "key002"))hashs中删除key002键值对
jedis.hincrBy("hashs", "key004", 100))key004整型键值的值增加100
jedis.hexists("hashs", "key003"))判断key003是否存在
jedis.hget("hashs", "key004"))获取key004对应的值
jedis.hmget("hashs", "key001", "key003"))批量获取key001和key003对应的值
jedis.hkeys("hashs"))获取hashs中所有的key
jedis.hvals("hashs"))获取hashs中所有的value

 

以上 方法总结来自 http://www.cnblogs.com/edisonfeng/p/3571870.html

 

 

 

Jedis

jedis.set

  public String set(final String key, String value) {
	checkIsInMulti();
	client.set(key, value);
	return client.getStatusCodeReply();
    }

 

jedis.get

 public String get(final String key) {
	checkIsInMulti();
	client.sendCommand(Protocol.Command.GET, key);
	return client.getBulkReply();
    }

 jedis.key("*")

 public Set<String> keys(final String pattern) {
	checkIsInMulti();
	client.keys(pattern);
	return BuilderFactory.STRING_SET
		.build(client.getBinaryMultiBulkReply());
    }

 jedis.mset() jedis.mget

  public String mset(final String... keysvalues) {
	checkIsInMulti();
	client.mset(keysvalues);
	return client.getStatusCodeReply();
    }

 

 public List<String> mget(final String... keys) {
	checkIsInMulti();
	client.mget(keys);
	return client.getMultiBulkReply();
    }

 

jedis.sadd

public void sadd(final byte[] key, final byte[]... members) {
	sendCommand(SADD, joinParameters(key, members));
    }

 

private byte[][] joinParameters(byte[] first, byte[][] rest) {
	byte[][] result = new byte[rest.length + 1][];
	result[0] = first;
	for (int i = 0; i < rest.length; i++) {
	    result[i + 1] = rest[i];
	}
	return result;
    }

 jedis.smembers

public Set<String> smembers(final String key) {
	checkIsInMulti();
	client.smembers(key);
	final List<String> members = client.getMultiBulkReply();
	return new HashSet<String>(members);
    }

 

public static final Builder<List<String>> STRING_LIST = new Builder<List<String>>() {
        @SuppressWarnings("unchecked")
        public List<String> build(Object data) {
            if (null == data) {
                return null;
            }
            List<byte[]> l = (List<byte[]>) data;
            final ArrayList<String> result = new ArrayList<String>(l.size());
            for (final byte[] barray : l) {
                if (barray == null) {
                    result.add(null);
                } else {
                    result.add(SafeEncoder.encode(barray));
                }
            }
            return result;
        }

        public String toString() {
            return "List<String>";
        }

    };

 

 

jedis.hset

 public Long hset(String key, String field, String value) {
	Jedis j = getShard(key);
	return j.hset(key, field, value);
    }

  jedis.hget

 public String hget(String key, String field) {
	Jedis j = getShard(key);
	return j.hget(key, field);
    }

 

private final Hashing algo;
private final Map<ShardInfo<R>, R> resources = new LinkedHashMap<ShardInfo<R>, R>();

 

 public R getShard(String key) {
        return resources.get(getShardInfo(key));
    }

 

 public S getShardInfo(byte[] key) {
        SortedMap<Long, S> tail = nodes.tailMap(algo.hash(key));
        if (tail.size() == 0) {
            return nodes.get(nodes.firstKey());
        }
        return tail.get(tail.firstKey());
    }

 

  Connection

 

Connection.connect()

 public void connect() {
        if (!isConnected()) {
            try {
                socket = new Socket();
                //->@wjw_add
                socket.setReuseAddress(true);
                socket.setKeepAlive(true);  //Will monitor the TCP connection is valid
                socket.setTcpNoDelay(true);  //Socket buffer Whetherclosed, to ensure timely delivery of data
                socket.setSoLinger(true,0);  //Control calls close () method, the underlying socket is closed immediately
                //<-@wjw_add

                socket.connect(new InetSocketAddress(host, port), timeout);
                socket.setSoTimeout(timeout);
                outputStream = new RedisOutputStream(socket.getOutputStream());
                inputStream = new RedisInputStream(socket.getInputStream());
            } catch (IOException ex) {
                throw new JedisConnectionException(ex);
            }
        }
    }

 

Connection.getStatusCodeReply

 protected String getStatusCodeReply() {
        flush();
        pipelinedCommands--;
        final byte[] resp = (byte[]) Protocol.read(inputStream);
        if (null == resp) {
            return null;
        } else {
            return SafeEncoder.encode(resp);
        }
    }

 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 上面很混乱
举一个实例  jedis.sdiff("sets1", "sets2") sets1和sets2差集 差集:set1中有,set2中没有的元素
jedis.sdiff
public Set<String> sdiff(final String... keys) {
	checkIsInMulti();
	client.sdiff(keys);
	return BuilderFactory.STRING_SET
		.build(client.getBinaryMultiBulkReply());
    }
 client.sdiff
public void sdiff(final String... keys) {
	final byte[][] bkeys = new byte[keys.length][];
	for (int i = 0; i < bkeys.length; i++) {
	    bkeys[i] = SafeEncoder.encode(keys[i]);
	}
	sdiff(bkeys);
    }
 binaryclient.sdiff
public void sdiff(final byte[]... keys) {
	sendCommand(SDIFF, keys);
    }
   connection.sendcommand
protected Connection sendCommand(final Command cmd, final byte[]... args) {
        connect();
        Protocol.sendCommand(outputStream, cmd, args);
        pipelinedCommands++;
        return this;
    }
 protocol.sendcommand
 
public static void sendCommand(final RedisOutputStream os,
	    final Command command, final byte[]... args) {
	sendCommand(os, command.raw, args);
    }
 
 
 private static void sendCommand(final RedisOutputStream os,
	    final byte[] command, final byte[]... args) {
	try {
	    os.write(ASTERISK_BYTE);
	    os.writeIntCrLf(args.length + 1);
	    os.write(DOLLAR_BYTE);
	    os.writeIntCrLf(command.length);
	    os.write(command);
	    os.writeCrLf();

	    for (final byte[] arg : args) {
		os.write(DOLLAR_BYTE);
		os.writeIntCrLf(arg.length);
		os.write(arg);
		os.writeCrLf();
	    }
	} catch (IOException e) {
	    throw new JedisConnectionException(e);
	}
    }
 buildfactory.STRING_SET
 public static final Builder<Set<String>> STRING_SET = new Builder<Set<String>>() {
        @SuppressWarnings("unchecked")
        public Set<String> build(Object data) {
            if (null == data) {
                return null;
            }
            List<byte[]> l = (List<byte[]>) data;
            final Set<String> result = new HashSet<String>(l.size());
            for (final byte[] barray : l) {
                if (barray == null) {
                    result.add(null);
                } else {
                    result.add(SafeEncoder.encode(barray));
                }
            }
            return result;
        }

        public String toString() {
            return "Set<String>";
        }

    };
 client.getBinaryMultiBulkReply
 public List<byte[]> getBinaryMultiBulkReply() {
        flush();
        pipelinedCommands--;
        return (List<byte[]>) Protocol.read(inputStream);
    }
 protocol.read
  public static Object read(final RedisInputStream is) {
	return process(is);
    }
 
private static Object process(final RedisInputStream is) {
	try {
	    byte b = is.readByte();
	    if (b == MINUS_BYTE) {
		processError(is);
	    } else if (b == ASTERISK_BYTE) {
		return processMultiBulkReply(is);
	    } else if (b == COLON_BYTE) {
		return processInteger(is);
	    } else if (b == DOLLAR_BYTE) {
		return processBulkReply(is);
	    } else if (b == PLUS_BYTE) {
		return processStatusCodeReply(is);
	    } else {
		throw new JedisConnectionException("Unknown reply: " + (char) b);
	    }
	} catch (IOException e) {
	    throw new JedisConnectionException(e);
	}
	return null;
    }
以上的可以看出 :  jedis.sdiff("sets1", "sets2") sets1和sets2差集 差集:set1中有,set2中没有的元素
redis 客户端 利用client.sdiff(keys)   是把他的 command  SDIFF 以及  set1,set2 封装起来 发送给  服务器
                     利用BuilderFactory.STRING_SET.build(client.getBinaryMultiBulkReply()) 从服务器获取 处理之后的数据。
          redis 服务器 端分析http://blog.chinaunix.net/uid-790245-id-3766842.html
 
 
 
 

 

 

 

 

 

 

 

 

 

 

 

捐助开发者

在兴趣的驱动下,写一个免费的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(右上角的爱心标志,支持支付宝和PayPal捐助),没钱捧个人场,谢谢各位。



 
 
 谢谢您的赞助,我会做的更好!

 

 

  • 大小: 19.5 KB
1
2
分享到:
评论
6 楼 ren895837248 2017-02-19  
人家画对的你非得给人改错。。
5 楼 knight_black_bob 2015-01-22  
lvwenwen 写道
哥们,这是什么工具画的?

rational rose
4 楼 knight_black_bob 2015-01-22  
lvwenwen 写道
哥们,这是什么工具画的?

rose
3 楼 bonait 2015-01-22  
应该是visio吧,www.zipin168.com
2 楼 ykssky 2015-01-22  
lvwenwen 写道
哥们,这是什么工具画的?

rational rose, 很老的东西
1 楼 lvwenwen 2015-01-21  
哥们,这是什么工具画的?

相关推荐

    各种版本的redis+Jedis驱动包

    在这个压缩包中,包含了不同平台下的Redis安装包,以及Jedis驱动,这使得在Windows和Linux环境下都能轻松地使用Redis。 首先,让我们详细了解Redis的不同版本: 1. **Redis Windows 32位与64位安装包**:Redis原本...

    linux中安装redis和jedis及jedispool

    linux中安装redis和jedis及jedispool; redis安装所遇到的问题;

    redis,jedis 需要的jar包

    使用Java操作Redis需要jedis-2.1.0.jar,如果需要使用Redis连接池的话,还需commons-pool-1.5.4.jar使用Java操作Redis需要jedis-2.1.0.jar,如果需要使用Redis连接池的话,还需commons-pool-1.5.4.jar

    spring boot redis-jedis

    本篇文章将深入探讨如何在Spring Boot项目中集成Redis,并使用Jedis客户端进行操作。 首先,我们要在Spring Boot项目中引入Redis和Jedis的依赖。在`pom.xml`文件中,我们需要添加以下依赖: ```xml &lt;groupId&gt;org...

    redis相关jar包(redis2.1.5、jedis2.9.0)

    在Java开发中,我们通常使用Jedis作为客户端库来与Redis进行交互。本文将深入探讨Redis、Jedis以及Spring Data Redis这三个核心概念,并结合提供的jar包版本,解析它们在实际开发中的应用。 首先,Redis是一个开源...

    jedis-2.9.0 最新版Redis客户端CSDN下载

    3. `jedis-2.9.0-sources.jar`:这个文件包含了Jedis的源代码,开发者可以查看源码来理解Jedis的工作原理,对于学习、调试和贡献代码非常有帮助。 Jedis的主要特性包括: - 连接管理:支持连接池,可配置连接超时...

    征服 Redis + Jedis

    通过阅读这篇博文,开发者可以学习到如何在Java项目中集成Redis和Jedis,以及如何利用它们优化应用程序的性能。同时,深入理解Redis的数据模型和Jedis的API将有助于解决实际问题,提升开发效率。

    Redis+Jedis+案例实战(高清视频教程).rar

    - 事务处理:了解Redis的单命令原子性及Jedis如何实现多命令的事务处理。 - 发布订阅:掌握Jedis的发布订阅模式,实现消息的发送和接收。 3. 实战案例: - 缓存应用:学习如何使用Redis作为Web应用的缓存,提高...

    redis使用jedis测试

    总的来说,通过`jedisTest`我们可以学习到如何使用Jedis进行Redis的基本操作,而`redis.txt`文件可能包含了更多关于这些操作的详细解释或示例代码。通过这种方式,开发者能够快速地在Java项目中集成和测试Redis功能...

    redis jedis jar包

    Jedis是Java语言中用于操作Redis的客户端库,它的功能强大且易于使用,支持多种Redis命令,使得开发者能够轻松地在Java应用中集成和操作Redis。 标题中的“redis jedis jar包”指的是使用Jedis库的Java开发者需要的...

    java连接redis/jedis连接池/jedis相关工具/jedis对象存取

    Jedis是Java语言中广泛使用的Redis客户端库,它提供了丰富的API来操作Redis服务器。 首先,让我们深入了解Java如何通过Jedis连接到Redis。Jedis连接池是优化资源管理的关键,它允许开发者预先创建并复用连接,避免...

    Shiro + JWT + SpringBoot + MySQL + Redis(Jedis)实现无状态鉴权机制

    本项目结合了Apache Shiro、JSON Web Token (JWT)、SpringBoot、MySQL数据库以及Redis缓存技术(通过Jedis客户端)来实现这一机制。下面我们将详细探讨这些组件在实现无状态鉴权中的作用。 **Apache Shiro** Apache...

    redis,jedis,jar包

    Jedis是Java语言中操作Redis的客户端库,它提供了丰富的API来与Redis服务器进行交互,实现了包括字符串、哈希、列表、集合、有序集合等多种数据类型的操作。 在Java项目中集成Redis,首先你需要在项目的类路径下...

    java连接redis的jedis.jar包

    Java连接Redis的Jedis库是Java开发者在进行Redis数据存储与检索时常用的一个客户端库。Redis是一个高性能的键值数据库,常被用作缓存、消息队列等场景,而Jedis则是Java语言中对Redis服务接口进行封装的库,方便Java...

    Redis和Jedis示例代码

    Jedis示例java编程相关代码适合java初学者使用,可熟悉redis缓存相关的操作,以及java编码基于springboot和jedis访问redis服务进行key/value键值对存储和获取附带redis环境安装教程,以及redis入门的介绍教程。...

    redis集成 jedis使用

    Jedis是Java语言中广泛使用的Redis客户端,提供了丰富的API来操作Redis服务器。在本文中,我们将深入探讨如何集成Redis并使用Jedis进行五种基本数据类型的测试:字符串(Strings)、哈希(Hashes)、列表(Lists)、...

    redis,jedis,sentinel需要的两个jar包

    在Java开发中,我们通常使用Jedis库来与Redis进行交互。Jedis是一个简单易用、高效的Redis客户端,提供了丰富的Redis命令支持。 标题中的“redis,jedis,sentinel需要的两个jar包”指的是为了在Java项目中使用...

    中间件:Redis 之 Jedis的使用

    ### 中间件:Redis 之 Jedis的使用 #### 一、Jedis简介 Jedis作为Redis官方推荐的Java客户端工具,在后端开发领域扮演着重要角色。它不仅提供了丰富的API来实现对Redis数据库的各种操作,而且还具备高效的连接池...

    redis jredis jedis 使用

    标题中的“redis jredis jedis 使用”表明我们将探讨三个与Redis相关的Java客户端库:Redis本身、JRedis和Jedis。Redis是一个开源的、基于内存的数据结构存储系统,常被用作数据库、缓存和消息中间件。而JRedis和...

    Redis及使用Jedis开发所需jar

    而Jedis是Java语言中常用的Redis客户端库,它提供了丰富的API来操作Redis服务器。 在Java开发环境中,为了使用Jedis与Redis进行交互,我们需要引入相应的jar包。这些jar包通常包含了Jedis库本身和其依赖的其他库,...

Global site tag (gtag.js) - Google Analytics