redis-jedis实例

学自:b站的博主:“一岁就会编程”的在线智能办公系统的教学视频

创建一个Spring Boot项目

依赖可以自己导入或创建时添加上

 pom文件添加依賴

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
            <!--
            1.x的版本默认采用的连接池技术是Jedis。
            2.0以上版本默认连接池是Lettuce。
            如果采用Jedis,需要排除Lettuce的依赖。
            -->
            <exclusions>
                <exclusion>
                    <groupId>io.lettuce</groupId>
                    <artifactId>lettuce-core</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!--Jedis依賴-->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

application.properties文件里添加

#Redis服务器地址
spring.redis.host=xxx.xxx.xxx.xxx
#Redis服务器端口
spring.redis.port= 6379
#Redis服务器密码
spring.redis.password= xxxx
#选择哪个库,默认0库
spring.redis.database=1
#选择超时时间
spring.redis.timeout=10000ms
#最大连接数,默认8
spring.redis.jedis.pool.max-active=1024
#最大连接阻塞等待时间,单位毫秒,默认 -1ms
spring.redis.jedis.pool.max-wait=10000ms
#最大空闲连接数,默认8
spring.redis.jedis.pool.max-idle=200
#最小空闲数连接,默认0
spring.redis.jedis.pool.min-idle=5

RedisConfig.java

@Configuration
public class RedisConfig {
    //服务器地址
    @Value("${spring.redis.host}")
    private String host;
    //服务器端口
    @Value("${spring.redis.port}")
    private int port;
    //访问密码
    @Value("${spring.redis.password}")
    private String password;
    //连接超时时间
    @Value("${spring.redis.timeout}")
    private String timeout;
    //最大连接数
    @Value("${spring.redis.jedis.pool.max-active}")
    private int maxTotal;
    //最大连接阻塞等待时间
    @Value("${spring.redis.jedis.pool.max-wait}")
    private String maxWaitMillis;
    //最大空闲连接
    @Value("${spring.redis.jedis.pool.max-idle}")
    private int maxIddle;
    //最小空闲连接
    @Value("${spring.redis.jedis.pool.min-idle}")
    private int minIdle;

    @Bean
    public JedisPool getJedisPool(){
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        //最大连接数
        jedisPoolConfig.setMaxTotal(maxTotal);
        //最大连接阻塞等待时间
        jedisPoolConfig.setMaxWaitMillis(Long.valueOf(maxWaitMillis.substring(0,maxWaitMillis.length()-2)));
        //最大空闲连接
        jedisPoolConfig.setMaxIdle(maxIddle);
        //最小空闲连接
        jedisPoolConfig.setMinIdle(minIdle);
        JedisPool jedisPool = new JedisPool(jedisPoolConfig,host,port,Integer.valueOf(timeout.substring(0,timeout.length()-2)),password);
        return jedisPool;
    }
}

User.java

public class User implements Serializable {

    private static final long serialVerionUID = 9148937431079191022L;
    private Integer id;
    private String username;
    private String password;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

SerializeUtil.java

/*
* 序列化工具
* */
public class SerializeUtil {
    /*
    * 将java对象转换为byte数组,序列化工程
    * */
    public static byte[] serialize(Object object){
        ObjectOutputStream oos = null;
        ByteArrayOutputStream baos = null;

        try {
            //序列化
            baos = new ByteArrayOutputStream();
            oos = new ObjectOutputStream(baos);
            oos.writeObject(object);
            byte[] bytes = baos.toByteArray();
            return bytes;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    /*
     * 将byte数组转换为java对象,反序列化
     * */
    public static Object unserialize(byte[] bytes){
        if(bytes == null){
            return null;
        }
        ByteArrayInputStream bais = null;
        try {
            //反序列化
            bais = new ByteArrayInputStream(bytes);
            ObjectInputStream ois = new ObjectInputStream(bais);
            return ois.readObject();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }
}

Test测试类

@SpringBootTest
@RunWith(SpringRunner.class)
public  class RedisJedisApplicationTests {

    /*
    * 连接Redis
    * */
//    @Test
//    void contextLoads() {
//        //初始化连接
//        //创建jedis对象,连接redis对象
//        Jedis jedis = new Jedis("10.74.3.107",6379);
//        //设置认证密码
//        jedis.auth("Redis1234");
//        //指定数据库,默认为0
//        jedis.select(1);
//        //使用ping命令,测试连接是否成功
//        String result = jedis.ping();
//        System.out.println(result);
//        //添加一条数据
//        jedis.set("name","zhangsan");
//        //获取一条数据
//        String name = jedis.get("name");
//        System.out.println(name);
//        //释放资源
//        if(jedis != null){
//            jedis.close();
//        }
//    }

    /*
    * jedis连接池操作redis
    * */
//    @Test
//    void initCont02(){
//        //初始化jedis连接池对象
//        JedisPool jedisPool = new JedisPool(new JedisPoolConfig(),"10.74.3.107",6379,1000,"Redis1234");
//        //从连接池获取jedis对象
//        Jedis jedis = jedisPool.getResource();
//        //指定数据库,默认为0
//        jedis.select(2);
//        //使用ping命令,测试连接是否成功
//        String result = jedis.ping();
//        System.out.println(result);
//        //添加一条数据
//        jedis.set("name","zhangsan");
//        //获取一条数据
//        String name = jedis.get("name");
//        System.out.println(name);
//        //释放资源
//        if(jedis != null){
//            jedis.close();
//        }
//    }

    @Autowired
    private JedisPool jedisPool;

    private Jedis jedis = null;

    //初始化jedis实例对象
    @Before
    public void initConnt(){
        jedis = jedisPool.getResource();
    }

    //释放资源
    @After
    public void closeConnt(){
        if (null != jedis){
            jedis.close();
        }
    }


    /*
    * 操作String
    * */
    @Test
    public void testString(){
        //添加一条数据
        jedis.set("name","zhangsan");
        //获取一条数据
        String name = jedis.get("name");
        System.out.println(name);
        //添加多条数据,参数的奇数是key,偶数是value
        jedis.mset("address","sh","sex","1");
        //获取多条数据
        List<String> list = jedis.mget("name","address","sex");
        list.forEach(System.out::println);
        //删除数据
        jedis.del("name");
    }

    /*
     * 操作hash
     * */
    @Test
    public void testHash(){
        /*
        * //添加一条数据
        * 第一条参数:redis的key
        * 第二条参数:hash的key
        * 第二条参数:hash的value
        * */
        jedis.hset("user","name","zhangsan");
        /*
        * //获取一条数据
        * 第一个参数:redis的key
        * 第二条参数:hash的key
        * */
        String name = jedis.hget("user","name");
        System.out.println(name);
        //添加多条数据
        Map<String,String> map = new HashMap<>();
        map.put("age","20");
        map.put("sex","1");
        jedis.hmset("user",map);
        //获取多条数据
        List<String> list = jedis.hmget("user","age","sex");
        list.forEach(System.out::println);
        //获取hash类型的所有数据
        Map<String,String> user = jedis.hgetAll("user");
        user.entrySet().forEach(e ->{
            System.out.println(e.getKey()+"----->"+e.getValue());
        });
        /*
        * //删除数据
        * 第一个参数:redis的key
        * 第二条参数:hash的key(可变)
        * */
        jedis.hdel("user","name","age");
    }

    /*
     * 操作list
     * */
    @Test
    public void testList(){
        //左添加
        jedis.lpush("students","zhangsan","lisi");
        //右添加
        jedis.rpush("students","wangwu","zhaoliu");
        /*
        * 获取数据
        * 第一个参数:redis的key
        * 第二个参数:起始下标
        * 第三个参数:结束下标
        * */
        List<String> list = jedis.lrange("students",0,3);
        list.forEach(System.out::println);
        //获取总条数
        long total = jedis.llen("students");
        System.out.println(total);
        /*
        * 删除数据
        * 第一个参数:redis的key
        * 第二个参数:参数值的个数
        * 第二个参数:需要删除的值
        * */
        jedis.lrem("students",1,"lisi");

        /*-------------*/
        //左弹出
        String left = jedis.lpop("students");
        System.out.println(left);
        //右弹出
        String right = jedis.rpop("students");
        System.out.println(right);
    }


    /*
     * 操作set
     * */
    @Test
    public void testSet(){
        //添加数据
        jedis.sadd("letters","aaa","bbb","ccc","ddd","eee");
        //获取数据
        Set<String> set = jedis.smembers("letters");
        set.forEach(System.out::println);
        //获取总条数
        Long total = jedis.scard("letters");
        System.out.println(total);
        //删除数据
        jedis.srem("letters","aaa","bbb");
    }

    /*
     * 操作Sortedset
     * */
    @Test
    public void testSortedSet(){
        //添加数据
        Map<String,Double> map = new HashMap<>();
        map.put("zhangsan",7D);
        map.put("lisi",3D);
        map.put("wangwu",5D);
        map.put("zhaoliu",6D);
        map.put("tianqi",1D);
        jedis.zadd("score",map);
        /*
        * 获取数据
        * 第一个参数:redis的key
        * 第二个参数:起始下标
        * 第三个参数:结束下标
        * */
        Set<String> set = jedis.zrange("score",0,4);
        set.forEach(System.out::println);
        //获取总条数
        Long total = jedis.zcard("score");
        System.out.println(total);
        //删除数据
        jedis.zrem("score","zhangsan","wangwu");
    }

    /*
     * 层及目录形式存储数据
     * */
    @Test
    public void testDir(){
        jedis.set("cart:user01:item01","apple");
        System.out.println(jedis.get("cart:user01:item01"));
    }


    /*
     * key失效时间
     * */
    @Test
    public void testExpire(){
    //给已经存在的key实质失效时间
        jedis.set("code","test");
        //设置失效时间,单位为秒
        jedis.expire("code",30);
        //设置失效时间,单位为毫秒
        jedis.pexpire("code",30000);
        //查看失效时间,单位秒,-1位不失效,-2为已失效
        long ttl = jedis.ttl("code");
        System.out.println(ttl);

    //添加key的时候设置失效时间
        //设置失效时间,单位为秒
        jedis.setex("code",30,"test");
        //设置失效时间,单位为毫秒
        jedis.psetex("code",30000,"test");
        //查看失效时间,单位毫秒
        Long pttl = jedis.pttl("code");
        System.out.println(pttl);

    //nx,ex的用法
        SetParams setParams = new SetParams();
        //不存在的时候才能设置成功
        setParams.nx();
        //存在的时候才能设置成功
        //setParams.xx();
        //设置失效时间,单位为秒
        //setParams.ex(30);
        //查看失效时间,单位毫秒
        setParams.px(30000);
        jedis.set("code","test",setParams);
    }

    /*
    * 查询所有key
    * */
    @Test
    void testAllKey(){
        //当前数据库key的数量
        Long size = jedis.dbSize();
        System.out.println(size);
        //查询当前数据库的所有key
        Set<String> set = jedis.keys("*");
        set.forEach(System.out::println);
    }

    /*
    * 事务
    * */
    @Test
    public void testMulti(){
        //开启事务
        Transaction tx = jedis.multi();
        tx.set("tel","10086");
        //提交事务
        //tx.exec();
        //回滚事务
        tx.discard();
    }

    /*
    * 操作byte数组
    * */
    @Test
    public void testByte(){
        User user = new User();
        user.setId(2);
        user.setUsername("zhangsan");
        user.setPassword("123456");
        //序列化为byte数组
        byte[] userKey = SerializeUtil.serialize("user"+user.getId());
        byte[] uservalue = SerializeUtil.serialize(user);
        //存入redis
        jedis.set(userKey,uservalue);
        // 取出数据
        byte[] bytes = jedis.get(userKey);
        //反序列化
        User user1 = (User) SerializeUtil.unserialize(bytes);
        System.out.println(user1);
    }
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值