【redis、Jedis】

【redis、Jedis】

redis

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

NoSQL,泛指非关系型数据库,主要分为四大类:
**1.key-value存储数据库。**该类数据库使用哈希表,在哈希表中包含特定的key和与其对应的指向特定数据的指针。常用的有Redis。
**2.列存储数据库。**该类数据库主要用来应对分布式存储的海量数据,一个键指向了多个列。常用的有HBase。
**3.文档型数据库。**该类数据库将结构化、半结构化的文档以特定格式存储,如json格式。一个文档相当于关系型数据库中的一条记录,也是处理信息的基本单位。常用的有MongoDB。
**4.图形数据库。**该类数据库使用图形理论来存储实体之间的关系信息,最主要的组成部分是:结点集、连接节点的关系。常用的有Neo4j。

下载安装(windows版)

  • 官网:https://redis.io/
  • 中文网:https://www.redis.net.cn/
  • 解压可以直接使用:
    • redis.windows.conf:配置文件
    • redis-cli.exe:redis的客户端
    • redis-server.exe:redis的服务器端

命令操作

redis的数据结构【重要】
  • redis存储的是key-value格式的数据:
    • key是字符串
    • value有五种数据结构:
      1. 字符串类型 string
      2. 哈希类型 hash
      3. 列表类型 list
      4. 集合类型 set
      5. 有序集合类型 sortedset
各个数据结构的键值对的命令
  • 字符串类型 string

    1. 存储:set key value
    2. 获取:get key
    3. 删除:del key
  • 哈希类型 hash

    1. 存储:hset key field value
    2. 获取:
      • 获取指定field对应的值:hget key field
      • 获取所有field和value:hgetall key
    3. 删除:hdel key field
  • 列表类型 list:可以添加一个元素到列表的头部(左边)或者尾部(右边)

    1. 存储:

      • lpush key value:将元素添加到列表的左边
      • rpush key value:将元素添加到列表的右边
    2. 获取列表的元素:

      • lrange key start end:范围获取

        获取全部为:lrange key 0 -1

    3. 删除:

      • lpop key:删除列表最左边的元素并将元素返回
      • rpop key:删除列表最右边的元素并将元素返回
  • 集合类型 set:不允许重复元素

    1. 存储:sadd key value
    2. 获取:smembers key:获取set集合中所有元素
    3. 删除:srem key value:删除set集合中的某个元素
  • 有序集合类型 sortedset:不允许重复元素,且元素有顺序

    1. 存储:zadd key score value:score为排序的分数,从小到大排序
    2. 获取:zrange key start end
    3. 删除:zrem key value
通用命令
  • 查询所有的键:keys *
  • 获取键对应的值的数据类型:type key
  • 删除指定的key value:del key
持久化
  • redis是一个内存数据库,当redis服务器重启或者电脑重启,数据会丢失。我们可以将redis内存中的数据持久化保存到硬盘的文件中。
  • redis的持久化机制:
    • RDB:默认方式,不需要进行配置,默认就是使用这种机制
      • 在一定的间隔时间中,检测key的变化情况,然后持久化数据
    • AOF:日志记录的方式,可以记录每一条命令的操作。可以每一次操作后,持久化数据
RDB方式持久化
  1. 编辑redis.windows.conf文件:

    save 900 1:after 900 sec (15 min) if at least 1 key changed

    save 300 10:after 300 sec (5 min) if at least 10 keys changed

    save 60 10000:after 60 sec if at least 10000 keys changed

  2. dos命令行重新启动redis服务器并指定配置文件:

    C:\Users\hp\Desktop\javaLearning\安装包\redis安装包\Redis-x64-3.2.100>redis-server.exe redis.windows.conf
    

Jedis

Jedis是一款Java操作redis数据库的工具,类似于之前操作MySql的JDBC。

使用步骤:

  1. 下载Jedis的jar包;
  2. 使用
    /**
     * 测试Jedis的使用
     */
    @org.junit.Test
    public void test01(){
        //1.导入Jedis的jar包
        //2.创建Jedis对象
        Jedis jedis = new Jedis("localhost",6379);
        //3.操作
        //3.1.添加string键值对
        jedis.set("username","张三");
        //3.2.获取
        String username = jedis.get("username");
        System.out.println(username);
        //3.3删除
        jedis.del("username");

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

    }

Jedis操作各种redis中的数据结构

字符串类型 string
    /**
     * Jedis操作字符串类型
     */
    @org.junit.Test
    public void test02(){
        //1.导入Jedis的jar包
        //2.创建Jedis对象
        Jedis jedis = new Jedis("localhost",6379);
        //3.操作
        //3.1.1.添加string键值对
        jedis.set("username","张三");
        //3.1.2.可以使用setex()方法存储可以指定过期时间的key value
        jedis.setex("password",20,"123456");
        //3.2.获取string的value
        String username = jedis.get("username");
        System.out.println(username);

        //3.3删除
        jedis.del("username");

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

    }
哈希类型 hash
    /**
     * Jedis操作hash类型
     */
    @org.junit.Test
    public void test03(){
        //1.导入Jedis的jar包
        //2.创建Jedis对象
        Jedis jedis = new Jedis("localhost",6379);
        //3.操作
        //3.1.添加string键hash值对
        jedis.hset("user","name","张三");
        jedis.hset("user","age","23");
        jedis.hset("user","gender","male");
        //3.2.1获取指定键的指定field的value
        String username = jedis.hget("user", "name");
        System.out.println(username);
        //3.2.2获取所有的键的所有值的map集合
        Map<String, String> user = jedis.hgetAll("user");
        //遍历map集合
        Set<String> keySet = user.keySet();
        for (String key : keySet) {
            System.out.println(key+":"+user.get(key));
        }

        //3.3删除键的指定field
        jedis.hdel("user", "name");

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

    }
列表类型 list
    /**
     * Jedis操作list类型
     */
    @org.junit.Test
    public void test04(){
        //1.导入Jedis的jar包
        //2.创建Jedis对象
        Jedis jedis = new Jedis();//如果使用空参构造,默认值:host:"localhost",port:6379
        //3.操作
        //3.1.添加string键list值对
        jedis.lpush("mylist","a","b","c");//从左边存
        jedis.lpush("mylist","a","b","c");//从右边存
        //3.2.范围获取
        List<String> mylist = jedis.lrange("mylist", 0, -1);
        System.out.println(mylist);

        //3.3删除(弹出)
        String lpop = jedis.lpop("mylist");
        String rpop = jedis.rpop("mylist");

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

    }
集合类型 set
    /**
     * Jedis操作set类型
     */
    @org.junit.Test
    public void test05(){
        //1.导入Jedis的jar包
        //2.创建Jedis对象
        Jedis jedis = new Jedis();//如果使用空参构造,默认值:host:"localhost",port:6379
        //3.操作
        //3.1.添加string键set值对
        jedis.sadd("myset","a","b");
        //3.2.获取
        Set<String> myset = jedis.smembers("myset");
        System.out.println(myset);

        //3.3删除集合中的某个元素
        jedis.srem("myset","a");

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

    }
有序集合类型 sortedset
    /**
     * Jedis操作sortedset类型
     */
    @org.junit.Test
    public void test06(){
        //1.导入Jedis的jar包
        //2.创建Jedis对象
        Jedis jedis = new Jedis();//如果使用空参构造,默认值:host:"localhost",port:6379
        //3.操作
        //3.1.添加string键sortedset值对
        jedis.zadd("gender",7,"老王");
        jedis.zadd("gender",6,"老李");
        jedis.zadd("gender",6,"老刘");
        //3.2.获取
        Set<String> gender = jedis.zrange("gender", 0, -1);
        System.out.println(gender);


        //3.3删除有序集合中的某个元素
        jedis.zrem("gender","老王");

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

    }

Jedis连接池:JedisPool

使用:

  1. 创建JedisPool连接池对象;
  2. 调用方法 getResource()获取Jedis连接对象。
    /**
     * Jedis连接池的使用
     */
    @org.junit.Test
    public void test07(){
        //0.导入JedisPool的jar包
        //1.创建连接池配置对象
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(50);
        config.setMaxIdle(10);
        //2.创建JedisPool对象
        JedisPool jedisPool = new JedisPool(config,"localhost",6379);
        //3.获取Jedis连接对象
        Jedis jedis = jedisPool.getResource();
        //4.操作
        //4.1.添加string键值对
        jedis.set("username","张三");
        //4.2.获取
        String username = jedis.get("username");
        System.out.println(username);
        //4.3删除
        jedis.del("username");

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

    }

JedisPool详细配置

#最大活动对象数
redis.pool.maxTotal=1000
#最大能够保持idel状态的对象数
redis.pool.maxIdle=100
#最小能够保持idel状态的对象数
redis.pool.minIdle=50
#当池内没有返回对象时,最大等待时间
redis.pool.maxWaitMillis=10000
#当调用borrow Object方法时,是否进行有效性检查
redis.pool.testOnBorrow=true
#当调用return Object方法时,是否进行有效性检查
redis.pool.testOnReturn=true
#“空闲链接”检测线程,检测的周期,毫秒数。如果为负值,表示不运行“检测线程”。默认为-1.
redis.pool.timeBetweenEvictionRunsMillis=30000
#向调用者输出“链接”对象时,是否检测它的空闲超时;
redis.pool.testWhileIdle=true
#对于“空闲链接”检测线程而言,每次检测的链接资源的个数。默认为3.
redis.pool.numTestsPerEvictionRun=50
#redis服务器的IP
redis.ip=xxxxxx
#redis服务器的Port
redis1.port=6379
JeidsPoolUtil工具类

/**
 * JedisPool的工具类,在配置文件中定义配置信息,降低耦合
 */
public class JedisPoolUtil {
    //设置成员变量jedisPool,供类中的方法统一使用
    private static JedisPool jedisPool;

    /**
     * 静态代码块,类加载是初始化jedisPool成员变量
     */
    static {
        //获取配置文件的输入流
        InputStream inputStream = JedisPoolUtil.class.getClassLoader().getResourceAsStream("jedis.properties");
        //创建属性集对象,并加载输入流
        Properties properties = new Properties();
        try {
            properties.load(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
        //创建连接池配置对象,获取相关配置内容
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxIdle(Integer.parseInt(properties.getProperty("maxIdle")));
        config.setMaxTotal(Integer.parseInt(properties.getProperty("maxTotal")));
        jedisPool = new JedisPool(config,properties.getProperty("host"),Integer.parseInt(properties.getProperty("port")));
    }

    /**
     * 获取jedis连接对象
     */
    public Jedis getJedis(){
        return jedisPool.getResource();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值