笔记-JavaWeb学习之旅19

Redis:redis是一款高性能的NOSQL系列的非关系型数据库

NOSQL: Not Only SQL ,意即“不仅仅是SQL”,是一项全新的数据库理念,泛指非关系型数据库

redis的数据及结构:

redis储存的是:Key,Value格式的数据,其中key都是字符串,value有5种不同的数据结构

value的数据结构:

1.字符串类型 string

存储方式:set key value

获取方式: get key

删除方式: del key

2.哈希类型 hash:相当于map格式

存储方式: hset key field value(hset myhash username lisi),(hset myhash password 123)

获取方式: hget key field(hget myhash username)

删除方式: hdel key field

3.列表类型 list :linkedlist格式,支持重复元素

存储方式:lpush key value:将元素加入列表左边 (rpush加入右边)

获取方式:lrange key start end :范围获取

删除方式:lpop key :删除列表左边元素(rpop删除列表右边优速)

3.集合类型 set :不允许重复元素

存储方式:sadd key value

获取方式:smembers key(获取所有元素)

删除方式:srem key value

4.有序集合类型 sortedset:不允许重复元素,且元素有顺序

存储方式:zadd key score value(每一个元素都关联一个score,按照score排序)

获取方式:zrange key start end [withscores](:查询所有元素,加上withscores会获取到分数)

删除方式:zrem key value

通用命令

​ 1. keys * : 查询所有的键
​ 2. type key : 获取键对应的value的类型
​ 3. del key:删除指定的key value

持久化:redis是一个内存数据库,当redis服务器重启,或者电脑重启,数据会丢失,我们可以将redis内存中的数据持久化保存到硬盘中,确保数据不会对视

redis持久化机制

RDB:默认方式,不需要配置,默认使用

AOF:日志记录的方式,可以记录每一天命令的操作。

Java客户端 jedis

jedis:一款java操作redis数据库的工具

package com.data.jedis;


import com.data.util.JedisPoolUtils;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

import java.util.List;
import java.util.Map;
import java.util.Set;

public class TestJedis {
    //字符串操作
    @Test
    public void test1(){
        //获取连接
        Jedis jedis = new Jedis("localhost",6379);
        //2.存储操作
        jedis.set("username","zhangsan");
        //获取
        String username = jedis.get("username");
        System.out.println(username);
        //可以使用setex()方法储存可以指定过期时间
        jedis.setex("activecode",20,"123");//20秒后自动删除该键
        //关闭连接
        jedis.close();
    }

    //hash数据结构操作
    @Test
    public void test2(){
        //获取连接
        Jedis jedis = new Jedis("localhost",6379);
        //2.存储操作
        jedis.hset("user","username","zhangsan");
        jedis.hset("user","age","22");
        jedis.hset("user","gender","male");
        //获取
        String user = jedis.hget("user","username");
        System.out.println(user);
        Map<String,String> map = jedis.hgetAll("user");
        Set<String> keys = map.keySet();
        for(String key :keys){
            System.out.print(key);
            String value = map.get(key);
            System.out.println(":"+value);
        }
        //关闭连接
        jedis.close();
    }
    //List集合结构
    @Test
    public void test3(){
        //获取连接
        Jedis jedis = new Jedis("localhost",6379);
        //2.存储操作
        jedis.lpush("username","a","b","c");//cba
        jedis.rpush("username","a","b","c");//abc
        //弹出
        String lpop1 = jedis.lpop("username");//c
        String rpop1 = jedis.rpop("username");//c
        System.out.println(lpop1);//c
        System.out.println(rpop1);//c
//        //范围获取
        List<String> list = jedis.lrange("username",0,-1);
        System.out.println(list);
        //关闭连接
        jedis.close();
    }
    //set集合
    @Test
    public void test4(){
        //获取连接
        Jedis jedis = new Jedis("localhost",6379);
        //2.存储操作
        jedis.sadd("myset","a","b","c","c");//不可以重复
        //获取
        Set<String> myset = jedis.smembers("myset");
        System.out.println(myset);
        //关闭连接
        jedis.close();
    }
    //sortedset集合
    @Test
    public void test5(){
        //获取连接
        Jedis jedis = new Jedis("localhost",6379);
        //2.存储操作
        jedis.zadd("mysorteset",50,"张三");
        jedis.zadd("mysorteset",30,"李四");
        jedis.zadd("mysorteset",40,"王五");
        //获取
        Set<String> mysorteset = jedis.zrange("mysorteset",0,-1);
        System.out.println(mysorteset);
        //关闭连接
        jedis.close();
    }
    //使用连接池
    @Test
    public void test6(){
        //配置连接对象
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(50);
        config.setMaxIdle(50);
        //创建Jedis连接池对象
        JedisPool jedisPool = new JedisPool(config,"localhost",6379);
        //获取连接
        Jedis jedis = jedisPool.getResource();
        //存储数据
        jedis.set("hehe","heihei");
        //获取数据
        String s = jedis.get("hehe");
        System.out.println(s);
        jedis.close();
    }

    @Test
    public void test7(){
        Jedis jedis = JedisPoolUtils.getJedis();
        jedis.set("hello","world");
        String s = jedis.get("hello");
        System.out.println(s);
        jedis.close();
    }
}

配置jedis连接池工具类

package com.data.util;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class JedisPoolUtils {
    private static JedisPool jedisPool;//定义连接池对象
    //定义配置文件
    static{
        InputStream is = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties");
        Properties pro =  new Properties();
        try {
           pro.load(is);//把配置加载进入内存
        } catch (IOException e) {
        }
        //获取参数,并且设置配置
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(Integer.parseInt(pro.getProperty("maxTotal")));//参数需要int类型,传递进来的是字符串,需要转型
        config.setMaxIdle(Integer.parseInt(pro.getProperty("maxIdle")));
        //初始化JedisPool
        jedisPool = new JedisPool(config,pro.getProperty("host"),Integer.parseInt(pro.getProperty("port")));
    }
    //创建jedisPool工具类
    public static Jedis getJedis(){
        return jedisPool.getResource();//该方法返回Jedis
    }
}
点赞