Redis的基本数据类型以及具体操作Demo

一、概述

Redis 是速度非常快的非关系型(NoSQL)内存键值数据库,可以存储键和五种不同类型的值之间的映射。

键的类型只能为字符串,值支持的五种类型数据类型为:字符串、列表、集合、有序集合、散列表。

Redis 支持很多特性,例如将内存中的数据持久化到硬盘中,使用复制来扩展读性能,使用分片来扩展写性能。

二、数据类型

数据类型可以存储的值操作
STRING字符串、整数或者浮点数对整个字符串或者字符串的其中一部分执行操作
对整数和浮点数执行自增或者自减操作
LIST列表从两端压入或者弹出元素
读取单个或者多个元素
进行修剪,只保留一个范围内的元素
SET无序集合添加、获取、移除单个元素
检查一个元素是否存在于集合中
计算交集、并集、差集
从集合里面随机获取元素
HASH包含键值对的无序散列表添加、获取、移除单个键值对
获取所有键值对
检查某个键是否存在
ZSET有序集合添加、获取、删除元素
根据分值范围或者成员来获取元素
计算一个键的排名

三、每种数据类型具体操作Demo

3.1 起步

首先,我们是在java使用Jedis对redis数据库进行操作的,Maven下可以直接添加如下依赖就可以使用了。

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.9.0</version>
    <type>jar</type>
    <scope>compile</scope>
</dependency>
接下来是连接redis数据库,如下:
Jedis jedis = new Jedis("redis://localhost:6379/9");  //默认地连接我的6379端口,如果什么都不填的话
jedis.flushDB(); //删掉之前数据

或者

pool = new JedisPool("redis://localhost:6379/10");
Jedis jedis = pool.getResource();  // 需在try-catch中使用

此外,添加一个print函数打印结果:

    public static void print(int index, Object obj){
        System.out.println(String.format("%d, %s",index,obj.toString()));
    }
3.2 String
        jedis.set("username","wade");
        print(1,jedis.get("username"));
        jedis.setex("hello",15,"world"); //只存在15s,不需要自己删除,用在验证码上(带有过期时间)
                                                           // 短信的验证时间
        // 数字的自增,自减
        jedis.set("pv","100");
        jedis.incr("pv");
        jedis.incr("pv");
        print(2,jedis.get("pv"));
        jedis.incrBy("pv",5);
        print(3,jedis.get("pv"));
        jedis.decr("pv");
        jedis.decrBy("pv",2);
        print(4,jedis.get("pv"));

        print(5,jedis.keys("*"));  
3.3 List

lpush : 从队列左边入队一个或多个元素。

lrange:从列表中获取指定的元素。   llen:获取列表长度

lpop:从左边出队一个元素   lindex:通过索引获取元素

linsert:在列表中一个元素的前后插入元素。

        String listName = "list";
        jedis.del(listName);
        for (int i = 0; i < 10; i++) {
            jedis.lpush(listName, "a"+String.valueOf(i));
        }
        print(5,jedis.lrange(listName,0,12));
        print(5,jedis.lrange(listName,0,3));
        print(6,jedis.llen(listName));
        print(7,jedis.lpop(listName));
        print(8,jedis.llen(listName));
        print(9,jedis.lindex(listName,3));
        print(10,jedis.linsert(listName, BinaryClient.LIST_POSITION.AFTER,"a4","xx"));
        print(10,jedis.linsert(listName, BinaryClient.LIST_POSITION.BEFORE,"a4","yy"));
        print(11,jedis.lrange(listName,0,12));
3.4 Hash
        //hash      开发的过程中,不知道对象有什么属性,就用这种
        String userKey = "userxxx";
        jedis.hset(userKey,"name","jim");      // hset
        jedis.hset(userKey,"age","12");
        jedis.hset(userKey,"phone","15623165465");
        print(12,jedis.hget(userKey,"name"));  //hget
        print(13,jedis.hgetAll(userKey));     //hgetAll
        //print(14,jedis.hdel(userKey,"phone"));  
        print(15,jedis.hexists(userKey,"email")); 
        print(16,jedis.hexists(userKey,"age"));
        print(17,jedis.hkeys(userKey));  // hkeys
        print(18,jedis.hvals(userKey));
        jedis.hsetnx(userKey,"school","nuaa");  // 不存在的话才更新
        jedis.hsetnx(userKey,"name","lzy");
        print(19,jedis.hgetAll(userKey));
结果:
12, jim
13, {name=jim, phone=15623165465, age=12}
15, false
16, true
17, [name, phone, age]
18, [jim, 12, 15623165465]
19, {name=jim, phone=15623165465, school=nuaa, age=12}
3.5 Set

添加:sadd: 

遍历:smembers:

集合操作: sunion、sdiff、sinter

删除:srem

计数:scard

        //set
        String likekey1 = "commentLike1";
        String likekey2 = "commentLike2";
        for (int i = 0; i < 10; i++) {
            jedis.sadd(likekey1,String.valueOf(i));      
            jedis.sadd(likekey2,String.valueOf(i*i));
        }
        print(20,jedis.smembers(likekey1));
        print(21,jedis.smembers(likekey2));
        // 集合求交
        print(22,jedis.sunion(likekey1,likekey2));
        print(23,jedis.sdiff(likekey1,likekey2));
        print(24,jedis.sinter(likekey1,likekey2));

        print(25,jedis.sismember(likekey1,"4"));
        print(26,jedis.sismember(likekey1,"16"));
        jedis.srem(likekey1,"5");  //删除
        print(27,jedis.smembers(likekey1));

        jedis.smove(likekey2,likekey1,"25"); //从前面向后面移个25
        print(28,jedis.smembers(likekey1));

        print(29,jedis.scard(likekey1));  // 计数,里面有几个值

结果:

20, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
21, [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
22, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 16, 25, 36, 49, 64, 81]
23, [8, 2, 3, 5, 6, 7]
24, [0, 1, 4, 9]
25, true
26, false
27, [0, 1, 2, 3, 4, 6, 7, 8, 9]
28, [0, 1, 2, 3, 4, 6, 7, 8, 9, 25]
29, 10
3.6 Sorted set / Zset (优先队列)

添加,zadd   计数,zcard  增加score值,zincrby(rankKey,2,"lucy")

取得score值: zscore     

        // 优先队列 可以用在排行榜
        String rankKey = "rankKey";
        jedis.zadd(rankKey,15,"jim");
        jedis.zadd(rankKey,60,"ben");
        jedis.zadd(rankKey,90,"lee");
        jedis.zadd(rankKey,75,"lucy");
        jedis.zadd(rankKey,80,"mei");
        print(30,jedis.zcard(rankKey));   //计数
        print(31,jedis.zcount(rankKey,61,100));
        print(32,jedis.zscore(rankKey,"lucy"));  // 得到score值
        jedis.zincrby(rankKey,2,"lucy");   // add score值
        print(33,jedis.zscore(rankKey,"lucy"));

        print(34,jedis.zrange(rankKey, 0,10));
        print(35,jedis.zrange(rankKey, 0,2)); //默认从小到大
        print(36,jedis.zrevrange(rankKey, 0,2));
        for (Tuple tuple:jedis.zrangeByScoreWithScores(rankKey,"60","100")) {   // 把分值范围内的值取出来
            print(37,tuple.getElement()+":"+String.valueOf(tuple.getScore()));
        }

        print(37,jedis.zrank(rankKey,"lee"));   // 得出具体排名
        print(38,jedis.zrevrank(rankKey,"lee"));

        String setKey = "zset";
        jedis.zadd(setKey,1,"a");
        jedis.zadd(setKey,1,"b");
        jedis.zadd(setKey,1,"c");
        jedis.zadd(setKey,1,"d");
        jedis.zadd(setKey,1,"e");

        print(39,jedis.zlexcount(setKey,"-","+"));
        print(40,jedis.zlexcount(setKey,"(b","(d"));
        print(41,jedis.zlexcount(setKey,"[b","[d"));
        jedis.zrem(setKey,"b");
        print(42,jedis.zrange(setKey,0,10));
        jedis.zremrangeByLex(setKey,"(c","+");    //根据字典序删除
        print(43,jedis.zrange(setKey,0,10));

结果:

30, 5
31, 3
32, 75.0
33, 77.0
34, [jim, ben, lucy, mei, lee]
35, [jim, ben, lucy]
36, [lee, mei, lucy]
37, ben:60.0
37, lucy:77.0
37, mei:80.0
37, lee:90.0
37, 4
38, 0
39, 5
40, 1
41, 3
42, [a, c, d, e]
43, [a, c]







  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值