在Java中操作Redis

本文阐述了Redis的不同客户端选择,如Redis-cli、Jedis和ioredis,以及在Spring项目中如何通过SpringDataRedis进行高阶操作,包括字符串、哈希、列表和集合数据的管理。
摘要由CSDN通过智能技术生成

一、Redis的客户端

1. Redis-cli:Redis自带的命令行客户端,可以使用redis-cli命令连接Redis服务器并执行命令。

2. Jedis:Java语言的Redis客户端,提供了丰富的API,可以进行数据的增删改查等操作。  

3. ioredis:Node.js语言的Redis客户端,具有异步和同步操作的能力,性能较高。  

4、Spring Data Redis:它是Spring的一部分,对Redis底层开发包进行了高度封装。
在Spring项目中,可以使用Spring Data Redis来简化操作。

以上是Redis的一些常见客户端,根据不同的需求和语言环境选择适合自己的客户端可以提高开发效率和程序性能。

二、Spring Data Redis使用方式

1、配置Spring Data Redis的依赖项
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
 
2、 配置Redis数据源

要注意在配置database:Rdeis数据库的时候,如果不配置database这一项,那默认的就是  0号数据库

3、 编写配置类,创建RedisTemplate对象
    public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        log.info("开始创建redis模板对象...");
        RedisTemplate redisTemplate = new RedisTemplate();
//        设置Redis的连接工厂对象
        redisTemplate.setConnectionFactory(redisConnectionFactory);
//        设置redis key的序列化工具
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        return redisTemplate;
    }

测试 :

编写一个测试类进行测试,程序运行完成成功输出,说明上面的配置是成功的~~


三、 通过RedisTemplate对象操作Redis

1、操作字符串类型的数据
    @Test
    public void testString() {
//        set get seteex setnx
        /**
         * set:将一个字符串设置为一个给定的值,并且这个值可以被后续的get操作获取到。  
         * get:获取一个给定key对应的数据值。  
         * setex:将一个字符串设置为一个给定的值,并且这个值会在特定的时间后过期。  
         * setnx:如果给定的key不存在,则将这个key设置为一个给定的值,并且这个值可以被后续的get操作获取到。  setex和setnx的区别在于,setex可以设置一个key的过期时间,而setnx只能设置一个key的值,无法设置过期时间。另外,如果key已经存在,setex会覆盖原有的值并且更新过期时间,而setnx则不会有任何操作。
         */
        redisTemplate.opsForValue().set("city", "北京");
        String city = (String) redisTemplate.opsForValue().get("city");
        System.out.println(city);
        redisTemplate.opsForValue().set("code", "1234", 3, TimeUnit.MINUTES);
        redisTemplate.opsForValue().setIfAbsent("lock","1");
        redisTemplate.opsForValue().setIfAbsent("lock","1");
    }
2、操作哈希类型的数据
    @Test
    public void testHash() {
//        hset hget hdel hlen hkeys hvals
        /**
         * hset:将哈希表 key 中的域 field 的值设为 value 。
         * hget:返回哈希表 key 中给定域 field 的值。
         * hmset:同时将多个 field-value (域-值)对设置到哈希表 key 中。
         * hmget:返回哈希表 key 中,一个或多个给定域
         */
        HashOperations hashOperations = redisTemplate.opsForHash();

        hashOperations.put("100", "name", "tom");
        hashOperations.put("100", "age", "28");

        String name = (String) hashOperations.get("100", "name");
        System.out.println(name);

        Set keys = hashOperations.keys("100");
        System.out.println(keys);

        List values = hashOperations.values("100");
        System.out.println(values);

        hashOperations.delete("100", "age");
    }
3、操作列表类型数据
    @Test
    public void testList() {
//        lpush lrange rpop llen 
        /**
         * 1. LPUSH:将一个或多个元素插入到列表的头部,并返回列表的新长度。 
         * 2. LRANGE:返回列表的一个或多个元素,可以指定起始和结束位置。 
         * 3. RPOP:从列表的尾部弹出并返回一个元素。 
         * 4. LLEN:返回列表的长度。
         */
        ListOperations listOperations = redisTemplate.opsForList();

        listOperations.leftPushAll("mylist", "a", "b", "c");
        listOperations.rightPush("mylist", "d");

        List mylist = listOperations.range("mylist", 0, -1);
        System.out.println(mylist);

        listOperations.rightPop("mylist");

        Long mylist1 = listOperations.size("mylist");
        System.out.println(mylist1);
    }
4、操作集合类型的数据
    @Test
    public void testSet() {
//        sadd smembers  scard sunion srem
        /**
         * sadd用于向一个set中添加一个或多个成员;
         * smembers用于返回一个set的所有成员;
         * scard用于返回一个set的成员数量;
         * sunion用于返回多个set的并集(即这些set中所有的成员);
         * srem用于从一个set中移除一个或多个成员。
         */
        SetOperations setOperations = redisTemplate.opsForSet();

        setOperations.add("set1", "a", "b", "c", "d");
        setOperations.add("set1", "a", "b", "x", "y");

        Set members = setOperations.members("set1");
        System.out.println(members);

        Long set1 = setOperations.size("set1");
        System.out.println(set1);

        Set intersect = setOperations.intersect("set1", "set2");
        System.out.println(intersect);

        Set union = setOperations.union("set1", "set2");
        System.out.println(union);

        setOperations.remove("set1", "a", "b");
    }
5、通用命令操作
    @Test
    public void testCommon() {
//        keys exists type del
        /**
         * keys:列出所有匹配的key。
         * exists:判断key是否存在。
         * type:判断key的类型。
         * del:删除key。
         */
        Set keys = redisTemplate.keys("*");
        System.out.println(keys);

        Boolean name = redisTemplate.hasKey("name");
        Boolean set1 = redisTemplate.hasKey("set1");

        for (Object key : keys) {
            DataType type = redisTemplate.type(key);
            System.out.println(type);
            System.out.println(type.name());
        }

        redisTemplate.delete("mylist");
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学CAD的河狸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值