redis常用命令 & java中代码实现

一、redis数据类型

 1.1、介绍

1.2、redis储存类型中value的五种常用数据类型

二、redis常用命令

        也就是说我们再操作mysql数据库的时候,我们select * from table1命令,就是查询table1表中的所有数据的命令,同理我们这里的redis常用命令,也是操作redis数据库的一些命令。

为了方便练习,我们就在windows客户端进行操作这些命令(毕竟windows系统直接点击打开服务端和客户端就可以进行操作了)

2.1、value为字符串string类型操作命令

也就是说redis储存类型为(key,字符串)格式的时候一些命令操作:

 

2.2、value为哈希操作命令

也就是说redis储存类型:key,value类型,此value为哈希结构。

2.3、value为list集合操作命令

也就是说redis储存类型:key,value类型,此value为list集合结构。

一个一个命令分析如下所示:

第一个命令:注意:添加的时候可以元素相同,比如集合中添加了a、b、c、d那么我们还可与往里面添加a,最终成了a、a、b、c、d形式在集合中

 第二个命令:(0到-1就表示把key对应的value集合里面的数据全部查询出来)

注意:是从集合的最后一个开始依次查询出来的。

第三个命令:移除并获取列表最后一个元素

 第四个命令:获取列表长度

第五个命令:移除并获取列表的最后一个元素,如果该list列表中没有元素了,那么就会阻塞列表直接列表中有了新的元素即可

特点:就是当list1集合中一个元素都没有的时候,还想再移除元素的时候,就会发生5s(设定的时间)的阻塞状态。

2.4、value为集合set操作命令

特点:无序不可重复、

 第一个命令:向集合中添加一个或多个元素

 第二个命令:获取集合的元素个数

 第三个命令:返回给定所有集合的交集

 第四个命令:返回所有给定集合的并集

        和上面的返回交集其实是一样的,交集只不过是返回的两个key对应的集合元素相同的部分元素,而并集就是:假如第一个集合中有a、b、c元素,第二个集合中有a、b、c、f、e元素,那么获取的这两个集合的并集元素就是a、b、c、e、f

第五个命令:返回给定所有集合的差集

 第六个命令:移除集合中一个或多个元素

2.5、有序集合sorted set操作命令

 总的来说就是:这个redis的key,value类型,其实这个value还是set类型,不过是有分数的而已,不多说演示如下所示:

第一个命令:向有序集合添加一个或多个元素

 我们查询集合中的元素的时候,还可以加上whthscores,那么就可以把各查询出来的元素对应的分数也一起显示出来:

 第二个命令:对集合中指定的元素分数进行增量

 第三个命令:移除集合中的一个或多个元素

三、Redis通用命令

 

四、在java中操作rides

通过 spring data redis 进行操作。

 

4.1、 操作value为String类型的数据

通过spring data redis 操作redis步骤如下所示:

第一步:导入坐标 (注:springboot工程)

 

第二步:配置连接redis属性

 解释属性中的一些配置:

其实我们的redis数据库中,redis是默认开启16个数据库的,演示如下所示:

 因此我们yml文件中 database:0 就是说我们所有的操作(比如对redis 数据库中进行储存数据,删除数据的一些命令操作)都是在0标对应的数据库中完成的,也就是说是在默认的16个数据库中的第一个数据库中进行操作的。如果设定database: 1 那么就表示用的是第二个数据库进行操作命令的。

还有一些配置都是可以在redis.windows.conf配置文件中查询到的:

 

第三步:自动装配RedisTemplate对象,自动装配获取到该RedisTemplate对象后,就可以通过该对象拿到下面的五个接口对象,然后进行一些命令操作了(如果拿的是ValueOperations接口对象,那么就能操作key,value类型的命令【我们知道redis的value有五种类型方式,ValueOperations接口对象对应的就是字符串类型,同理其余四个接口对象也各自对应自己的类型方式】)

 

然后我们在redis服务端就可以通过查看一下是否set上数据了:

 

解决RedisTemplate对象序列化问题,配置代码如下所示:

 

 

总结value类型为String的命令在java中对应的代码方法:

也就是说这些下面的命令,用java代码如何实现:

 上面四个命令对应的java代码写法如下所示:

@Test
    public void String(){
        
        // 通过RedisTemplate对象拿到ValueOperations接口对象
        // 拿到后就可以操作一些key,value类型方式的命令了 注:value为字符串类型
        ValueOperations ops = redisTemplate.opsForValue();

        /**
         *  1、对应的命令: SET key value   设置指定key的值
         */
        ops.set("usernanme789","junker");    // 向redis数据库中set储存 key为username,value为junker的数据

        /**
         * 2、对应的命令: GET key     获取指定key的值
         *  (我们知道上面已经存入到redis数据库中了一个key为usernanme789,value为junker的数据了,
         *      因此我们可以通过key:usernanme789获取value)
         */
        Object o = ops.get("usernanme789");
        System.out.println(o);  // junker

        /**
         * 3、对应的命令: SETEX key seconds value    设置指定key的值,并将key的过期时间设为seconds秒
         */
        ops.set("key1","hahhaa",10l, TimeUnit.SECONDS); // TimeUnit.SECONDS 表示秒,也就是10s
                                                                // 还可以.天、月、年

        /**
         * 4、SETNX key value    只有在key不存在时设置key的值
         */
        Boolean aBoolean = ops.setIfAbsent("usernanme789", "hahaha");
        System.out.println(aBoolean);   // false (为false的原因是因为usernanme789的key在redis数据库中已经存在了)

    }

4.2、操作value为Hash类型的数据

同理和上面的那个大差不差,还是通过RedisTemplate对象获取接口对象而已,只不过这次获取的接口对象是HashOperations接口对象了(专门操作value类型为哈希命令的对象)。

 这几个命令对应的java代码中写法如下所示:

@Autowired
    private RedisTemplate redisTemplate;    // 自动装配获得RedisTemplate对象
    
    @Test
    public void Hash(){
        // 通过RedisTemplate对象获取到HashOperations接口对象
        HashOperations ops = redisTemplate.opsForHash();

        /**
         *  对应的命令:HSET key field value : 将哈希表key中的字段field字段的值设为value
         */
        ops.put("hashkey1","name","junker");
        ops.put("hashkey1","addr","zz");
        ops.put("hashkey1","age","20");

        /**
         *  对应的命令:HGET key field :获取存储在哈希表中指定字段的值
         */
        Object o = ops.get("hashkey1", "name"); // 获取key为hashkey1,value为哈希类型的name对应的value值
        System.out.println(o);

        /**
         *  对应的命令:HDEL key field :删除存储在哈希表中的指定字段
         */
        ops.delete("hashkey1","age");

        /**
         * 对应的命令:HKEYS key  :获取value为哈希表中的所有字段数据
         */
        Set keys = ops.keys("hashkey1");
        for (Object data:keys) {
            System.out.println(data);   // addr  name
        }

        /**
         * 对应的命令:HVALS key  : 获取哈希表中所有值
         */
        List values = ops.values("hashkey1");
        for (Object data:values) {
            System.out.println(data);
        }
        
    }

4.3、操作value为list集合类型的数据

同理和上面的那个大差不差,还是通过RedisTemplate对象获取接口对象而已,只不过这次获取的接口对象是ListOperations接口对象了(专门操作value为list集合命令的对象)。

 上面的几个命令对应的java代码写法如下所示:

@Autowired
    private RedisTemplate redisTemplate;    // 自动装配获得RedisTemplate对象

    @Test
    public void List(){
        // 通过RedisTemplate对象获取到ListOperations接口对象
        ListOperations ops = redisTemplate.opsForList();

        /**
         * 对应的命令:LPUSH key value1 [value2]  : 将一个或多个值插入到list集合列表当中
         */
        ops.leftPush("listkey1","a");   // 注意:这个leftPush方法只能一次向list集合中储存一个元素值
                                             //

        ops.leftPushAll("listkey1","b","c","d");    // 这个方法可以一次性向list集合中储存多个元素值


        /**
         *  对应的命令:LRANGE key start stop : 也就是说获取value中list集合列表中的元素
         */
        List list = ops.range("listkey1", 0, -1);   // 0到-1表示查询list集合中的所有元素
        for (Object data : list) {
            System.out.println(data);   // 依次输出 d、c、b、a  (和用命令的时候查询出来的顺序是一样的。)
        }


        /**
         *  对应的命令:LLEN key  : 获取列表长度 (也就是说假如list集合列表中有5个元素,那么对应的列表长度就应该是5)
         */
        Long size = ops.size("listkey1");
        System.out.println(size);

        /**
         *  对应的命令:BRPOP key1 [key2 ] timeout :移除并获取列表的最后一个元素,如果该list列表中没有元素了,
         *  那么就会阻塞列表直到列表中有了新的元素即可,阻塞多久是可以设定的。
         */

        Object o = ops.rightPop("listkey1");
        System.out.println(o);
        
    }

4.4、操作value为set集合类型的数据(无序的set)

同理和上面的那个大差不差,还是通过RedisTemplate对象获取接口对象而已,只不过这次获取的接口对象是SetOperations接口对象了(专门操作value为set集合命令的对象)。

上面的几个命令对应的java代码写法如下所示: 

 @Autowired
    private RedisTemplate redisTemplate;    // 自动装配获得RedisTemplate对象


    @Test
    public void Set(){
        // 通过RedisTemplate对象获取到SetOperations接口对象
        SetOperations ops = redisTemplate.opsForSet();

        /**
         *  命令: SADD key member1 [member2]  :向set集合中添加一个或多个元素
         */
        ops.add("setkey1","a","b","c","d","a"); // 注意:当向set集合中储存已经有的元素比如a时,那么这个a就会把有的那个a元素数据覆盖掉 (也就是说不可重复)

        /**
         *  命令: SMEMBERS key    : 获取set集合中所有的元素
         */
        Set set = ops.members("setkey1");
        for (Object data : set) {
            System.out.println(data);
        }

        /**
         *  命令: SREM key member1 [member2] :删除set集合中一个或多个元素
         */
        ops.remove("setkey1","a","b");

    }

4.5、操作value为set集合类型的数据(有序的set)

同理和上面的那个大差不差,还是通过RedisTemplate对象获取接口对象而已,只不过这次获取的接口对象是ZSetOperations接口对象了(专门操作value为set集合命令的对象 注意:该set集合是有序集合)。

上面的几个命令使用java代码的写法如下所示:

 @Autowired
    private RedisTemplate redisTemplate;    // 自动装配获得RedisTemplate对象
    
    @Test
    public void ZSet(){
        // 通过RedisTemplate对象获取到ZSetOperations接口对象
        ZSetOperations ops = redisTemplate.opsForZSet();

        /**
         *  命令: ZADD key score1 member1 [score2 member2]    :向有序set集合中添加一个或多个元素(每个元素都关联着一个double类型的分数)
         */
        ops.add("zsetkey1","a",10.0);   // 注意分数写成double类型
        ops.add("zsetkey1","b",9.0);
        ops.add("zsetkey1","c",9.5);



        /**
         *  命令: ZRANGE key start stop [WITHSCORES]  :获取集合中的元素
         */
        Set set = ops.range("zsetkey1", 0, -1);
        for (Object data : set) {
            System.out.println(data);   // 注意:获取出来的元素是按照元素对应的分数从小到大排序列出来的
        }

        /**
         *  命令:ZINCRBY key increment member :为集合中的元素增加分数
         */
        ops.incrementScore("zsetkey1","a",60.0);    // 为 a元素增加60分
    }

 

4.6、操作一些通用的命令(也就是value五种类型通用的命令)

上面的几个通用命令对应的java代码写法如下所示:

 @Autowired
    private RedisTemplate redisTemplate;    // 自动装配获得RedisTemplate对象

    @Test
    public void A(){

        /**
         *  命令: KEYS pattern    :通常 pattern为* 表示查看redis数据库中所有的key值
         */
        Set set = redisTemplate.keys("*");
        for (Object data : set) {
            System.out.println(data);
        }

        /**
         * 命令: EXISTS key   : 检查指定的key是否在redis数据库中已经存在
         */
        Boolean key = redisTemplate.hasKey("key123456");
        System.out.println(key);    // 如果在redis数据库中没有key123456的key,那么就返回false

        /**
         * 命令: TYPE key     : 返回key所储存的value值的数据类型(比如说是string类型的value呢,还是哈希类型的value呢....反正就是那五种value类型)
         */
        DataType type = redisTemplate.type("setkey1");
        System.out.println(type.name());    // 把value类型的名字给我拿出来(如果value类型是String类型,那么就输出String, 如果value是哈希类型,那么就返回hash....)

    }

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值