redis-04:jedis与SpringBoot整合

使用Java来操作RedisJedisRedis官方推荐使用的Java连接redis的客户端。

1.导入依赖

2.启动redis服务,测试连接

public class TestPing {

    //测试 redis连接
    public static void main(String[] args) {

        Jedis jedis = new Jedis("127.0.0.1",6379);
        System.out.println( jedis.ping()); //PONG

    }

}

3.操作redis

    public static void main(String[] args) {

        Jedis jedis = new Jedis("127.0.0.1",6379);
        System.out.println( jedis.ping()); //PONG

        //获取所有key
        System.out.println(jedis.keys("*"));

        //删除当前数据库所有数据
        System.out.println(jedis.flushDB());

        //新增数据
        System.out.println(jedis.set("name","zhangsan"));
        System.out.println(jedis.set("password","123"));

        //展示数据
        System.out.println("name ="+jedis.get("name"));
        System.out.println("password ="+jedis.get("password"));

        //判断存在
        System.out.println("存在name ? "+jedis.exists("name"));
        System.out.println("存在name2 ? "+jedis.exists("name2"));

        //数据库大小
        System.out.println("大小 "+jedis.dbSize());

        //删除所有数据
        jedis.flushAll();
        System.out.println(jedis.keys("*"));

        //关闭连接
        jedis.close();

 

 

常用api

public class TestString {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("127.0.0.1", 6379);

        //jedis.flushDB();
        System.out.println("===========增加数据===========");
        System.out.println(jedis.set("key1","value1"));
        System.out.println(jedis.set("key2","value2"));
        System.out.println(jedis.set("key3", "value3"));
        System.out.println("删除键key2:"+jedis.del("key2"));
        System.out.println("获取键key2:"+jedis.get("key2"));
        System.out.println("修改key1:"+jedis.set("key1", "value1Changed"));
        System.out.println("获取key1的值:"+jedis.get("key1"));
        System.out.println("在key3后面加入值:"+jedis.append("key3", "End"));
        System.out.println("key3的值:"+jedis.get("key3"));
        System.out.println("增加多个键值对:"+jedis.mset("key01","value01","key02","value02","key03","value03"));
        System.out.println("获取多个键值对:"+jedis.mget("key01","key02","key03"));
        System.out.println("获取多个键值对:"+jedis.mget("key01","key02","key03","key04"));
        System.out.println("删除多个键值对:"+jedis.del("key01","key02"));
        System.out.println("获取多个键值对:"+jedis.mget("key01","key02","key03"));

        //jedis.flushDB();
        System.out.println("===========新增键值对防止覆盖原先值==============");
        //命令在指定的 key 不存在时,为 key 设置指定的值。
        System.out.println(jedis.setnx("key1", "value1"));
        System.out.println(jedis.setnx("key2", "value2"));
        System.out.println(jedis.setnx("key2", "value2-new"));
        System.out.println(jedis.get("key1"));
        System.out.println(jedis.get("key2"));

        System.out.println("===========新增键值对并设置有效时间=============");
        System.out.println(jedis.setex("key3", 2, "value3"));
        System.out.println(jedis.get("key3"));
        try {
            TimeUnit.SECONDS.sleep(3);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(jedis.get("key3"));

        System.out.println("===========获取原值,更新为新值==========");
        //用于设置指定 key 的值,并返回 key 的旧值。
        System.out.println(jedis.getSet("key2", "key2GetSet"));
        System.out.println(jedis.get("key2"));

        System.out.println("获得key2的值的字串:"+jedis.getrange("key2", 2, 4));
    }
}

public class TestMuti {
    public static void main(String[] args) {
        //创建客户端连接服务端,redis服务端需要被开启
        Jedis jedis = new Jedis("127.0.0.1", 6379);
        jedis.flushDB();

        JSONObject jsonObject = new JSONObject();
        jsonObject.put("hello", "world");
        jsonObject.put("name", "java");
        //开启事务
        Transaction multi = jedis.multi();
        String result = jsonObject.toJSONString();
        try{
            //向redis存入一条数据
            multi.set("json", result);
            //再存入一条数据
            multi.set("json2", result);
            //这里引发了异常,用0作为被除数
            int i = 100/0;
            //如果没有引发异常,执行进入队列的命令
            multi.exec();
        }catch(Exception e){
            e.printStackTrace();
            //如果出现异常,回滚
            multi.discard();
        }finally{
            System.out.println(jedis.get("json"));
            System.out.println(jedis.get("json2"));
            //最终关闭客户端
            jedis.close();
        }
    }
}

 

SpringBoot整合:

1.导入依赖

2.配置redis

3.测试连接

class SpringbootRedisApplicationTests {

    @Autowired
    private RedisTemplate redisTemplate;

    @Autowired
    private RedisTemplate myRedisTemplate;

    @Test
    void contextLoads() throws JsonProcessingException {
        // 操作字符串  类似于 String
        //redisTemplate.opsForHash();
        //redisTemplate.opsForList();
        //redisTemplate.opsForSet();

        redisTemplate.opsForValue().set("name","zhangsan");
        System.out.println(redisTemplate.opsForValue().get("name"));

    }

}

3.操作redis

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.vnian.pojo.Student;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;

@SpringBootTest
class SpringbootRedisApplicationTests {

    @Autowired
    private RedisTemplate redisTemplate;

    @Autowired
    private RedisTemplate myRedisTemplate;

    @Test
    void contextLoads() throws JsonProcessingException {
        // 操作字符串  类似于 String
        redisTemplate.opsForHash();
        redisTemplate.opsForList();
        redisTemplate.opsForSet();

        redisTemplate.opsForValue().set("name","zhangsan");
        System.out.println(redisTemplate.opsForValue().get("name"));


        //提供了部分基本操作  事务+expire+delete
        redisTemplate.keys("*");
        redisTemplate.multi();
        redisTemplate.delete("name");
        System.out.println(redisTemplate.opsForValue().get("name"));
        获取redis连接对象
        RedisConnection connection = redisTemplate.getConnectionFactory().getConnection();
        connection.flushAll();
        connection.close();
        connection.flushDb();


        //默认如果保存对象,使用jdk序列化机制,序列化后的数据保存到redis中
        Student student = new Student("Adele ","28");
        redisTemplate.opsForValue().set("student",student);
        System.out.println(redisTemplate.opsForValue().get("student"));//Student{name='Adele ', age='28'}


        //需要将对象转为json格式存储
        /*
        *       1.将对象转为json格式
        *       2.redis默认的序列化规则
        * */

        //1.
        String jsonStudent = new ObjectMapper().writeValueAsString(student);
        redisTemplate.opsForValue().set("jsonStudent",jsonStudent);
        System.out.println(redisTemplate.opsForValue().get("jsonStudent"));//{"name":"Adele ","age":"28"}


        myRedisTemplate.opsForValue().set("jsonStudent2",student);
        System.out.println(myRedisTemplate.opsForValue().get("jsonStudent2"));

    }

}

 

 

自定义redisTemplate

1.查找配置

默认使用jdk序列化

实体类需要实现序列化接口

自定义序列化方式(存储对象)

 


版权声明:本文为weize_hh原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。