博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
redis的各种数据类型
阅读量:6496 次
发布时间:2019-06-24

本文共 8214 字,大约阅读时间需要 27 分钟。

hot3.png

redis的各种数据类型

        redis的数据类型有好集中,例如:string,hash,list,set,sort set,sub/pub。每一中在网络中都有大量的应用场景。结合jedis来讲解这些数据类型的使用方式和场景。

1、string

        string的数据类型是[key:value]的键值对,它的key形式官方推荐为 xxx:xxx:xxx 的分类。在java中我们可以通过JSON工具,将object的数据转换为json字符串存放在其中,取值时在转换成object对象。

        命令:

#设置、获取>set string:test:1 string1      ->ok>get string:test:1              ->string1#根据字符串的长度获取字符>getrange string:test:1 0 3     ->stri#修改值>setrange string:test:1 3      ->7 (修改后的字符串长度)>get string:test:1             ->strong1#设置新的获取旧值(替换)>getset string:test:1 setgetstring1  ->string1>get string:test:1              ->getsetstring1#批量获取>mget string:test:1 string:test:2   ->getsetstring1->string2#批量设置>mset string1 firststring string2 secendstring ->ok#设置key的时间>setex string:test:3 20 string3    ->ok>ttl string:test:3                 ->2020s后查询>get string:test:3                 ->null#递增、递减、加多少>set string3 22>incr string3              ->23>decr string3              ->22>incrby string3 5          ->27>decrby string3 5          ->22#追加>set s1 s1>append s1 s2        -->4>get s1              ->s1s2#删除key>del string1                ->1#当某个值不存在,就设置(可以用来检测是否存在)redis:0>setnx s1 s1111redis:0>setnx s1 s2220

        jedis使用:

/**	 * @see 测试string类型	 */	@Test	public void stringTest() {		System.out.println(getJedis().set("string1", "string2"));		System.out.print(getJedis().get("string1"));		System.out.println(getJedis().getSet("string1", "string3"));		System.out.println(getJedis().get("string1"));		System.out.println(getJedis().mset("s1", "s1", "s2", "s2", "s3", "s3"));		System.out.println(getJedis().mget("s1", "s2", "s3"));		System.out.println(getJedis().setex("se1", 20, "sn1"));		System.out.println(getJedis().ttl("se1"));		System.out.println(getJedis().get("se1"));		System.out.println(getJedis().set("inc1", "33"));		System.out.println(getJedis().incr("inc1"));		System.out.println(getJedis().decr("inc1"));		System.out.println(getJedis().incrBy("inc1", 5));		System.out.println(getJedis().decrBy("inc1", 5));		System.out.println(getJedis().del("inc1", "s1", "string1", "s2", "s3"));		System.out.println(getJedis().setnx("s1", "s111"));		System.out.println(getJedis().setnx("s1", "s222"));	}

2、hash

        Redis的哈希值是字符串字段和字符串值之间的映射,所以他们是表示对象的完美数据类型。在Redis中的哈希值,可存储超过400十亿键值对。hash类型有点像对象,使用它来修改存放对象,每次修改数据不用全部修改完全。使用object转换为json字符串存放为string类型,每次修改会全部修改。

        命令

#设置、获取>hset stest name "h1"       -->1>hget stest name            -->h1#设置、获取多个>hmset stext1 name "h2" age 22 cache "trueredis:0>"        -->ok>hmget stext1 name age cache1) h22) 223) true#将stext1建下的值作为一个hash列出来>hgetall stext11) name2) h23) age4) 225) cache6) true#获取所有的hash字段redis:0>hkeys stext11) name2) age3) cache#获取建的散列字段个数redis:0>hlen redis:0> stext14#增加某个hash字段的value值redis:0>hincrby stext1 age 123#某个值不存在的时候设置redis:0>hsetnx stext1 sex male1redis:0>hsetnx stext1 sex fredis:0>male0#获取所有的valueredis:0>hvals stext11) h22) 233) true4) male

        jedis使用

/**	 * @see 测试hash	 */	@Test	public void testHash() {		System.out.println(getJedis().hset("st1", "name", "t1"));		System.out.println(getJedis().hget("st1", "name"));		HashMap
 hm = new HashMap
(); hm.put("age", "22"); hm.put("sex", "male"); hm.put("cache", "true"); System.out.println(getJedis().hmset("st1", hm)); System.out.println(getJedis().hmget("st1", "name", "age", "sex", "cache"));  System.out.println(getJedis().hgetAll("st1"));  System.out.println(getJedis().hkeys("st1"));  System.out.println(getJedis().hlen("st1"));  System.out.println(getJedis().hvals("st1")); System.out.println(getJedis().hsetnx("st1", "account", "111")); }

3、list

        Redis列表是简单的字符串列表,排序插入顺序。您可以在头部或列表的尾部Redis的列表添加元素。列表的最大长度为232 - 1 (每个列表超过4十亿元素4294967295)元素。list在可重复的一对多情况使用

        命令

#一、添加数据#1、从头部添加。(如果没有key,则添加新key)redis:0>LPUSH tls t1     ->1redis:0>LPUSH tls t2     ->2#检查添加,如果有key则添加,否则就换回0redis:0>LPUSHX tls t6    ->6redis:0>LPUSHX tls1  t7    ->0#2、添加数据到尾部redis:0>RPUSH tls ts7    ->8#检测插入尾部redis:0>RPUSHX tls rp1    ->9redis:0>RPUSHX tls1 rp2    ->0#3、插入某个值前面redis:0>LINSERT tls BEFORE t4 ti4 ->7二、获取#1、通过索引获取,从头部开始(最新一个)redis:0>lindex tls 0        -t6#2、长度redis:0>llen tls            ->9#3、取出头部、并删除(最新一个)redis:0>LPOP tls         -->t6redis:0>llen tls         -->8#4、获取尾部、并删除redis:0>RPOP tls        -->rp1redis:0>llen tls        -->7三、修改#1、修改list中的value范围,范围之外的删除redis:0>LTRIM tls 0 4        ->OKredis:0>LLEN tls            ->5#2、修改特定索引的值redis:0>LSET tls 0 lst     ->OK四、获取所有redis:0>lrange tls 0 -11) lst2) ti43) t44) t35) t2

        jedis作用

@Test	public void testList() {		// 从头部		System.out.println(getJedis().lpush("list1", "user1"));		System.out.println(getJedis().lpushx("list2", "user1"));		System.out.println(getJedis().lpop("list1"));		// 从尾部		System.out.println(getJedis().rpush("list1", "user2"));		System.out.println(getJedis().rpushx("list2", "user2"));		System.out.println(getJedis().rpop("list1"));		// 插入		System.out.println(getJedis().linsert("list1", LIST_POSITION.BEFORE, "user2", "user0"));		// 获取		System.out.println(getJedis().lindex("list1", 1));		System.out.println(getJedis().llen("list1"));		// 修改		System.out.println(getJedis().ltrim("list1", 0, 1));		System.out.println(getJedis().lset("list1", 0, "user3"));	}

4、set

    Set类型看作为没有排序的字符集合, 和List有排序的字符集和唯一的区别是,Set集合中不允许出现重复的元素,而且这些操作的时间复杂度为O(1),即常量时间内完成次操作。 Set可包含的最大元素数量是4294967295。换句话说,如果多次添加相同元素,Set中将仅保留该元素的一份拷贝。和List类型相比,Set类型在功能上还存在着一个非常重要的特性,即在服务器端完成多个Sets之间的聚合计算操作,如unions、intersections和differences。由于这些操作均在服务端完成,因此效率极高,而且也节省了大量的网络IO开销。可以在例如用户的地址记录,操作记录,文章访问用户的记录等等一对多的场景。

    命令

#一、添加(只能存放没有的数据)redis:0>sadd stt a b c    -->3redis:0>sadd stt a b e    -->1#二、查询#1、是否存在redis:0>sismember stt a    -->1#2、所用redis:0>smembers stt1) c2) e3) a4) b#3、set中的值个数redis:0>scard stt        -->4#4、随机返回redis:0>srandmember stt    -->e#5、返回并删除一个redis:0>spop stt        -->aredis:0>scard stt        -->3

       jedis

/**	 * @see 测试set	 */	@Test	public void testSet() {		// 插入		System.out.println(getJedis().sadd("set1", "1"));		System.out.println(getJedis().sadd("set1", "2"));		System.out.println(getJedis().sadd("set1", "3"));		// 查询是否存在		System.out.println(getJedis().sismember("set1", "1"));		System.out.println(getJedis().sismember("set1", "4"));		// 个数		System.out.println(getJedis().scard("set1"));		// 随机返回		System.out.println(getJedis().srandmember("set1"));		// 随机删除		System.out.println(getJedis().spop("set1"));	}

5、sort set(重要)

       Redis有序集合类似Redis集合存储在设定值唯一性。不同的是,一个有序集合的每个成员带有分数,用于以便采取有序set命令,从最小的到最大的分数有关。Redis 有序set添加,删除和测试中的O(1)的存在成员(固定时间,无论里面包含的元素集合的数量)。列表的最大长度为232- 1元素(4294967295,超过4十亿每个元素的集合)。 有序集合和集合类似,但是每一个value都会有一个分数。这个类型的用途非常广,例如排名功能,有数据记录的功能等等需要。

        命令

一、添加#1、添加:key,score,valueredis:0> ZADD sost 0 -1   --> user1二、修改#1、增加某个value的scoreredis:0>ZINCRBY sost 10 user2    -->15三、查询#1、获取总数redis:0>zcard sost     -->1#2、递增查询redis:0>zrange sost 0 -1 withscores1) user32) 23) user44) 35) user26) 57) user18) 555#3、分数范围个数范围查询redis:0>zcount sost 3 555        -->3#4、查询value的排序(应该是排在哪个档次,因为存在份数相同的情况)redis:0>zrank sost user1        -->2#5、递减查询redis:0>zrevrange sost1 0 -1 withscores1) user32) 43) user14) 35) user26) 27) user48) 1#6、查询成员份数redis:0>zscore sost1 user3        -->4四、计算#1、交集求和redis:0>ZINTERSTORE sost2 2 sost sost1    -->4#2、求并redis:0>ZUNIONSTORE out 2 sost sost1 WEIGHTS 1 3    -->4五、删除#删除value成员redis:0>ZREM sost user1 user2        -->2

        jedis

/**	 * @see 测试sort set	 */	@Test	public void testSortSet() {		// 添加		System.out.println(getJedis().zadd("set1", 20, "user1"));		System.out.println(getJedis().zadd("set1", 17, "user3"));		// 修改积分		System.out.println(getJedis().zincrby("set1", 5, "user1"));		// 总数		System.out.println(getJedis().zcard("set1"));		// 查询		System.out.println(getJedis().zrange("set1", 0, -1));		System.out.println(getJedis().zrangeWithScores("set1", 0, -1));		System.out.println(getJedis().zscore("set1", "user1"));		// 分数范围内的value个数		System.out.println(getJedis().zcount("set1", 0, 25));		// 排序范围		System.out.println(getJedis().zrank("set1", "user1"));		// 删除		System.out.println(getJedis().zrem("set1", "user1"));		// 并集求和		System.out.println(getJedis().zinterstore("out", "set1", "set2"));	}

6、sub/pub

        Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。

        命令

一、订阅、退订#1、订阅redis:0>subscribe mytest mytest1#2、匹配查询redis:0>psubscribe mytest* #3、退订redis:0>unsubscribe mytest 二、发送记录redis:0>publish mytest hello

  

转载于:https://my.oschina.net/u/2246410/blog/625913

你可能感兴趣的文章
leetcode976
查看>>
uni-app学习
查看>>
JS中的“!!”
查看>>
适配器模式--在NBA我需要翻译
查看>>
PHP中输出本地时间
查看>>
禁用iOS9 App Transport Security(ATS)特性时不起作用
查看>>
SQL2012的新分页方法
查看>>
SQL调用C# dll(第二中DLL,强名称密匙)
查看>>
Javascript中valueOf与toString区别
查看>>
FFOM_秒交易行
查看>>
结对第二次—文献摘要热词统计及进阶需求
查看>>
IsDirectory( )的用法
查看>>
Android 界面style
查看>>
Java学习之路(三)
查看>>
Codeforces 314 E. Sereja and Squares
查看>>
bzoj千题计划283:bzoj4516: [Sdoi2016]生成魔咒(后缀数组)
查看>>
bzoj千题计划315:bzoj3172: [Tjoi2013]单词(AC自动机)
查看>>
将工程改造为SOA架构
查看>>
设置 微信分享时候的的标题 缩略图 连接 描述
查看>>
如何打开注册表编辑器
查看>>