Redis数据类型

Redis数据类型

2.1、Redis数据类型

Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

2.1.1、字符串

String(字符串)是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。string类型是Redis最基本的数据类型,一个键最大能存储512MB。

     public static void testString(){
		@SuppressWarnings("resource")
		Jedis jedis = new Jedis("10.108.169.6");		
		//清空数据库中的数据,若不删除该数据会一直存在内存中,其他的连接也能获得该数据
		jedis.flushDB();		
		//向key-->name中放入了value-->JackGSmith
        jedis.set("name", "JackGSmith");
        //根据key-->name获取value
        jedis.get("name");
        //使用mset设置多个键值对
        jedis.mset("name1","name1_value","name2","name2_value");
        //使用mget获取多个value
        List<String> list=jedis.mget("name","name1","name2");
        //拼接
        jedis.append("name", " is a name");
        //删除某个键
        jedis.del("name1");
        //一次删除多个键
        jedis.del(new String[]{"key201", "key202"});
        //系统中所有key
        Set<String> keys = jedis.keys("*");
        Iterator<String> it=keys.iterator() ;
        //遍历
        while(it.hasNext()){   
            String key = it.next();   
            System.out.println(jedis.get(key));   
        }
        //判断key是否存在
        System.out.println(jedis.exists("name"));
        //获取value字符串的子串
        jedis.getrange("name",1,5);
        //setnx,key不存在时设置value,返回值为1;key已存在时,无法设置value,返回0.
        Long i = jedis.setnx("key", "value301");     
        //设置过期时间
        System.out.println("设置 name的过期时间为5秒:"+jedis.expire("name", 5));
        try{ 
            Thread.sleep(2000); 
        } 
        catch (InterruptedException e){ 
        } 
        // 查看某个key的剩余生存时间,单位【秒】.永久生存或者不存在的都返回-1
        System.out.println("查看name的剩余生存时间:"+jedis.ttl("name"));
        // 移除某个key的生存时间
        System.out.println("移除name的生存时间:"+jedis.persist("name"));
        System.out.println("查看name的剩余生存时间:"+jedis.ttl("name"));
        // 查看key所储存的值的类型
        System.out.println("查看name所储存的值的类型:"+jedis.type("name"));
        jedis.disconnect(); 
    }
    set(key, value):给数据库中名称为key的string赋予值value
    get(key):返回数据库中名称为key的string的value
    getset(key, value):给名称为key的string赋予上一次的value
    mget(key1, key2,…, key N):返回库中多个string的value
    setnx(key, value):添加string,名称为key,值为value
    setex(key, time, value):向库中添加string,设定过期时间time
    mset(key N, value N):批量设置多个string的值
    msetnx(key N, value N):如果所有名称为key i的string都不存在
    incr(key):名称为key的string增1操作
    incrby(key, integer):名称为key的string增加integer
    decr(key):名称为key的string减1操作
    decrby(key, integer):名称为key的string减少integer
    append(key, value):名称为key的string的值附加value
    substr(key, start, end):返回名称为key的string的value的子串

2.1.2、Redis 哈希(Hash)

Redishash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。
         public static void testHash(){
		@SuppressWarnings("resource")
		Jedis jedis = new Jedis("10.108.169.6");
		jedis.flushDB();
		//HSET key field value将哈希表key中的域field的值设为value。   
		jedis.hset("website", "google", "www.google.cn");   
		jedis.hset("website", "baidu", "www.baidu.com");   
		jedis.hset("website", "sina", "www.sina.com");
		//HMSET key field value [field value ...] 同时将多个field - value(域-值)对设置到哈希表key中。   
		Map<String, String> map = new HashMap<String, String>();   
		map.put("cardid", "123456");   
		map.put("username", "jzkangta");   
		jedis.hmset("hash", map);  	
		//HGET key field返回哈希表key中给定域field的值。   
		System.out.println(jedis.hget("hash", "username")); 
		//HMGET key field [field ...]返回哈希表key中,一个或多个给定域的值。   
		List<String> list = jedis.hmget("website","google","baidu","sina");   
		for(int i=0;i<list.size();i++){   
		    System.out.println(list.get(i));   
		}
		//HGETALL key返回哈希表key中,所有的域和值。   
		Map<String,String> map1 = jedis.hgetAll("hash");   
		for(Map.Entry entry: map1.entrySet()) {   
		     System.out.print(entry.getKey() + ":" + entry.getValue() + "\t");   
		} 
		//删除key field
		jedis.del("hash","username");
		//判断是否存在
		jedis.hexists("hash", "key003");
		//hkeys(); key返回哈希表key中的所有域
		System.out.println(jedis.hkeys("website"));
		//HVALS key返回哈希表key中的所有值
		System.out.println(jedis.hvals("website"));
		//HLEN key 返回哈希表key中域的数量。
		jedis.hlen("website");
		//HINCRBY key field increment为哈希表key中的域field的值加上增量increment。
		jedis.hincrBy("hash", "cardid", 7);
		System.out.println(jedis.hget("hash", "cardid"));
		jedis.disconnect(); 
	}
    hset(key, field, value):向名称为key的hash中添加元素field
    hget(key, field):返回名称为key的hash中field对应的value
    hmget(key, (fields)):返回名称为key的hash中field i对应的value
    hmset(key, (fields)):向名称为key的hash中添加元素field 
    hincrby(key, field, integer):将名称为key的hash中field的value增加integer
    hexists(key, field):名称为key的hash中是否存在键为field的域
    hdel(key, field):删除名称为key的hash中键为field的域
    hlen(key):返回名称为key的hash中元素个数
    hkeys(key):返回名称为key的hash中所有键
    hvals(key):返回名称为key的hash中所有键对应的value
    hgetall(key):返回名称为key的hash中所有的键(field)及其对应的value

2.1.3、Redis 列表(List)

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)。一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。

       public static void testList(){
		@SuppressWarnings("resource")
		Jedis redis = new Jedis("10.108.169.6");
		redis.flushDB();
		//LPUSH key value [value ...]将值value插入到列表key的表头。   
		redis.lpush("list", "abc");   
		redis.lpush("list", "xzc");   
		redis.lpush("list", "erf");   
		redis.lpush("list1", "abc1");   
		redis.lpush("list1", "xzc1");   
		redis.lpush("list1", "erf1");
		//去除key的某个元素
		System.out.println(redis.lindex("list", 2));		
		//删除下标0-1区间之内的元素
		System.out.println(redis.ltrim("list1",0,1));
		System.out.println(redis.lrange("list1", 0, -1));
		//llen,获取key list的长度
		System.out.println(redis.llen("list"));		
		redis.lpop("list");
		System.out.println(redis.lrange("list", 0, -1));
		
		//LRANGE key start stop返回列表key中指定区间内的元素,区间以偏移量start和stop指定。下标(index)参数start和stop都以0为底,也就是说,以0表示列表的第一个元素,以1表示列表的第二个元素,以此类推。你也可以使用负数下标,以-1表示列表的最后一个元素,-2表示列表的倒数第二个元素,以此类推。   
		List<String> list = redis.lrange("list", 0, -1);   
		for(int i=0;i<list.size();i++){   
		    System.out.println(list.get(i));   
		}
		redis.disconnect(); 
	}
    rpush(key, value):在名称为key的list尾添加一个值为value的元素
    lpush(key, value):在名称为key的list头添加一个值为value的 元素
    llen(key):返回名称为key的list的长度
    lrange(key, start, end):返回名称为key的list中start至end之间的元素
    ltrim(key, start, end):截取名称为key的list
    lindex(key, index):返回名称为key的list中index位置的元素
    lset(key, index, value):给名称为key的list中index位置的元素赋值
    lrem(key, count, value):删除count个key的list中值为value的元素
    lpop(key):返回并删除名称为key的list中的首元素
    rpop(key):返回并删除名称为key的list中的尾元素
    blpop(key1, key2,… key N, timeout):lpop命令的block版本。
    brpop(key1, key2,… key N, timeout):rpop的block版本。
    rpoplpush(srckey, dstkey):返回并删除名称为srckey的list的尾元素

2.1.4、Redis 集合(Set)

Redis的Set是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。Redis 中 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。集合中最大的成员数为 232 - 1 (4294967295,每个集合可存储40多亿个成员)。
       public static void testSet(){
		@SuppressWarnings("resource")
		Jedis redis = new Jedis("10.108.169.6");
		redis.flushDB();
		//SADD key member [member ...]将member元素加入到集合key当中。   
		redis.sadd("testSet", "s1");   
		redis.sadd("testSet", "s2");   
		redis.sadd("testSet", "s3");   
		redis.sadd("testSet", "s4");   
		redis.sadd("testSet", "s5"); 
		redis.sadd("Set", "s1");
		redis.sadd("Set", "s2");
		redis.sadd("Set", "s7");
		//sinter(), 两个集合之间的交集
		System.out.println(redis.sinter("testSet","Set"));
		//sunion(), 两个集合之间的并集
		System.out.println(redis.sunion("testSet","Set"));
		//sdiff(), 两个集合之间的差集
		System.out.println(redis.sdiff("testSet","Set"));
		//获取Set中元素的数量
		System.out.println(redis.scard("testSet"));
		//移到集合元素
		redis.smove("testSet", "Set", "s3");
		System.out.println(redis.smembers("Set"));
		//SREM key member移除集合中的member元素。   
		redis.srem("testSet", "s5");   
		//随机返回并删除名称为key的set中一个元素
		redis.spop("testSet");
		//SMEMBERS key返回集合key中的所有成员。   
		Set<String> set = redis.smembers("testSet");   
		Iterator<String> t1=set.iterator() ;   
		while(t1.hasNext()){   
		    Object obj1=t1.next();   
		    System.out.println(obj1);   
		}   

		//SISMEMBER key member判断member元素是否是集合key的成员。是(true),否则(false)   
		System.out.println(redis.sismember("testSet", "s4")); 
		redis.disconnect(); 
	}
    sadd(key, member):向名称为key的set中添加元素member
    srem(key, member) :删除名称为key的set中的元素member
    spop(key) :随机返回并删除名称为key的set中一个元素
    smove(srckey, dstkey, member) :移到集合元素
    scard(key) :返回名称为key的set的基数
    sismember(key, member) :member是否是名称为key的set的元素
    sinter(key1, key2,…key N) :求交集
    sinterstore(dstkey, (keys)) :求交集并将交集保存到dstkey的集合
    sunion(key1, (keys)) :求并集
    sunionstore(dstkey, (keys)) :求并集并将并集保存到dstkey的集合
    sdiff(key1, (keys)) :求差集
    sdiffstore(dstkey, (keys)) :求差集并将差集保存到dstkey的集合
    smembers(key) :返回名称为key的set的所有元素
    srandmember(key) :随机返回名称为key的set的一个元素

2.1.5、Redis 有序集合(sorted set)

Redis有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295,每个集合可存储40多亿个成员)
      public static void testZSet(){
		@SuppressWarnings("resource")
		Jedis redis = new Jedis("10.108.169.6");
		redis.flushDB();
		redis.zadd("ZSet",2.0,"s1");
		redis.zadd("ZSet",9.0,"s2");
		redis.zadd("ZSet",4.8,"s3");
		redis.zadd("ZSet",2.8,"s4");
		//统计zset集合中权重某个范围内(1.0——5.0),元素的个数
		System.out.println(redis.zcount("ZSet", 1.0, 5.0));
		//查看Set中s2的权重
		System.out.println(redis.zscore("ZSet", "s2"));
		//按照权重值排序
		System.out.println(redis.zrange("ZSet", 0, -1));//[s1, s4, s3, s2]
		//获取Set中元素的数量
		System.out.println(redis.zcard("ZSet"));
		redis.zrem("ZSet", "s2");
		System.out.println(redis.zrange("ZSet", 0, -1));//[s1, s4, s3]
		redis.disconnect(); 
	}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值