在java中操作redis

Redis的客户端很多,官方推荐三种:(Jedis,lettuce,Redission)。spring data redis,在Spring Boot 项目中还提供了对应的Starter,即Spring-boot-starter-data-redis.
Jedis的maven坐标:

<dependency>
	<groupld>redis.clients</groupld>
	<artifactld>jedis</artifactld>
	<version>2.8.0</version>
</dependency>

使用Jedis操作Redis的步骤:

  1. 获取连接
  2. 执行操作
  3. 关闭连接
public void testRedis(){
	//1.获取连接
	Jedis jedis = new Jedis("localhost",6379);
	//2.执行具体的操作
	jedis.set("username","xiaoming");
	//关闭连接
	jedis.close();
}

使用spring Data Redis

<dependency>
	<groupld>org.springframework.boot</groupld>
	<artifactld>spring-boot-starter-data-redis</artifactld>
</dependency>

Spring Data Redis中提供了一个高度封装的类: RedisTemplate,针对edis客户端中大量api进行了归类封装,将同一类型操作封装为operation接口,具体分类如下:

  • ValueOperations:简单K-V操作
  • SetOperations: set类型数据操作
  • ZSetOperations: zset类型数据操作
  • HashOperations:针对map类型的数据操作
  • ListOperations:针对list类型的数据操作
    spring中添加配置:
spring:
	application:
		name: springRedis_demo
	redis:
		host: localhost
		port: 6379
		password:
		database: 0 # 默认操作0号数据库
		jedis:
			pool:
				max-active: 8 # 最大连接数
				max-wait: 1ms # 连接池最大阻塞等待时间
				max-idle: 4 # 连接池中最大空闲连接
				min-idle: 0 # 连接池中最小空闲连接
  • ValueOperations:简单K-V操作 对String类型的操作
ValueOperations valueOperations = redisTemplate.opsForValue();
        /*设置String类型的key值*/
        valueOperations.set("city","beijing");
        /*根据key获取值*/
        String city = (String) valueOperations.get("city");
        /*设置过期时间*/
        valueOperations.set("key1","value1",10l, TimeUnit.SECONDS);
        /*如果没有key则设置并返回true,有key不设置并返回false*/
        Boolean aBoolean = valueOperations.setIfAbsent("city", "nanjing");
        System.out.println(aBoolean);
  • HashOperations:针对map类型的数据操作
public void testHash(){
        HashOperations hashOperations = redisTemplate.opsForHash();
        /*存数据*/
        hashOperations.put("002","name","xiaoming");
        hashOperations.put("002","age","20");
        hashOperations.put("002","addr","beijing");
        /*取数据*/
        String age = (String) hashOperations.get("002", "age");
        System.out.println(age);
        /*获取hash结构中的所有字段*/
        Set keys = hashOperations.keys("002");
        for (Object key : keys) {
            System.out.println(key);
        }
        /*获取hash结构中的所有值*/
        List values = hashOperations.values("002");
        for (Object value : values) {
            System.out.println(value);
        }
    }
  • ListOperations:针对list类型的数据操作
/*操作List类型的数据*/
    public void TestList(){
        ListOperations listOperations = redisTemplate.opsForList();
        //存值
        listOperations.leftPush("mylist","a");
        listOperations.leftPushAll("mylist","b","c","d");

        //取值
        List<String> mylist = listOperations.range("mylist", 0, -1);
        for (String s : mylist) {
            System.out.println(s);
        }

        /*获取列表长度*/
        Long mylist2 = listOperations.size("mylist");
        int lSize = mylist2.intValue();
        for (int i = 0; i < lSize; i++) {
            /*出队列*/
            String mylist1 = (String) listOperations.rightPop("mylist");
            System.out.println(mylist1);
        }
    }
  • SetOperations: set类型数据操作
/*操作set类型数据*/
    @Test
    public void testSet(){
        SetOperations setOperations = redisTemplate.opsForSet();
        //存值
        setOperations.add("mySet","a","b","c","a");
        //取值
        Set<String> mySet = setOperations.members("mySet");
        for (String s : mySet) {
            System.out.println(s);
        }
        //删除成员
        setOperations.remove("myset","a","b");
        //取值
        mySet = setOperations.members("mySet");
        for (String s : mySet) {
            System.out.println(s);
        }
    }
  • ZSetOperations: zset类型数据操作
/*操作ZSET类型的数据*/
    @Test
    public void testZset(){
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();
        /*存值*/
        zSetOperations.add("myZSet","a",10.0);
        zSetOperations.add("myZSet","b",11.0);
        zSetOperations.add("myZSet","c",12.0);
        zSetOperations.add("myZSet","a",13.0);
        /*取值*/
        Set<String> myZset = zSetOperations.range("myZSet", 0, -1);
        for (String s : myZset) {
            System.out.println(s);
        }
        /*修改分数*/
        zSetOperations.incrementScore("myZSet","b",20);
        /*取值*/
        myZset = zSetOperations.range("myZSet", 0, -1);
        for (String s : myZset) {
            System.out.println(s);
        }
        /*删除成员*/
        zSetOperations.remove("myZSet","a","b");
        /*取值*/
        myZset = zSetOperations.range("myZSet", 0, -1);
        for (String s : myZset) {
            System.out.println(s);
        }
    }
  • 通用操作
/*操作ZSET类型的数据*/
    @Test
    public void testZset(){
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();
        /*存值*/
        zSetOperations.add("myZSet","a",10.0);
        zSetOperations.add("myZSet","b",11.0);
        zSetOperations.add("myZSet","c",12.0);
        zSetOperations.add("myZSet","a",13.0);
        /*取值*/
        Set<String> myZset = zSetOperations.range("myZSet", 0, -1);
        for (String s : myZset) {
            System.out.println(s);
        }
        /*修改分数*/
        zSetOperations.incrementScore("myZSet","b",20);
        /*取值*/
        myZset = zSetOperations.range("myZSet", 0, -1);
        for (String s : myZset) {
            System.out.println(s);
        }
        /*删除成员*/
        zSetOperations.remove("myZSet","a","b");
        /*取值*/
        myZset = zSetOperations.range("myZSet", 0, -1);
        for (String s : myZset) {
            System.out.println(s);
        }
    }
posted @ 2022-12-26 14:35  生活的样子就该是那样  阅读(354)  评论(0)    收藏  举报