每一年都奔走在自己热爱里

没有人是一座孤岛,总有谁爱着你

redis基础学习笔记

redis

1.概念

  • reids高性能非关系型数据库(NOSQL---->Not Only SQL)
  • 关系型数据库与非关系型数据库的对比:
    • 关系型数据库:
      • 数据之间有耦合/关系
      • 数据存储在硬盘中---->操作关系型数据库消耗资源大
      • 优点:支持复杂查询及多表查询,事务支持使其安全性高
    • 非关系型数据库:
      • 数据存储形式为键值对,文档,图片
      • 数据之间没有耦合
      • 数据存储在内存中----->对于并不经常发生变化的数据使用缓存思想
      • 缓存思想:与缓存交互而不是与数据库直接交互
      • 缺点:不提供数据库对事物的处理

2.下载安装

3.命令操作

  • redis的数据格式:键值对,key都为字符串,value有5种不同的数据格式:
    • 字符串:String
    • 哈希类型 hash:map格式---->键值对
    • 列表类型 list:linkedlist格式
    • 集合类型 set ---->不允许重复
    • 有序集合类型 sortedset---->自动进行排序
  • 字符串形式:
    • 存储:set key value
    • 获取:get key
    • 删除:del key
  • 哈希类型:
    • 存储:hset key (field value)
    • 获取:hget key field---->获取所有的值:hgetall key
    • 删除:hdel
  • 列表类型(字符串列表可模拟队列操作):
    • 可选择从两端加入数据---->lpush key value / rpush key value
    • 获取:lrange key start end:范围获取
    • 删除并返回:lpop key / rpop key
  • 集合类型(不允许重复不保证顺序):
    • 存储:sadd key value
    • 获取集合中所有的元素:smembers key
    • 删除集合中的某个元素:srem key value
  • 有序集合(不允许有重复元素且有序,每个成员关联着一个double评分):
    • 存储:zadd key score value
    • 获取:zrange key start end
    • 删除:zrem key value
  • 通用命令:
    • 查询所有的键:keys *
    • 查询键对应的数据类型:type key
    • 删除指定的键值对:del key

4.持久化操作

  • redis是一个内存数据库,当redis服务器重启,数据将会丢失,我们可以将redis内存中的数据持久化保存到硬盘的文件中。
  • redis持久化机制(通过操作配置文件更改):
    • RDB默认方式,间隔一定的时间,检测key的变化情况,然后持久化数据
      • save 900 1;save 300 10;save 60 10000---->每隔900秒并且有一条数据发生改变就持久化一次
      • 重启redis服务器并指定配置文件的名称
      • redis-server.exe redis.windows.conf
    • AOF:日志记录的方式,记录每一条命令的操作,每次命令操作都持久化数据
      • 操作配置文件:appendonly no---->appendonly yes
        • appendfsync always:每次操作都进行持久化
        • appendfsync evertsec:每秒钟
        • appendfsync no:不进行持久化

5.使用java客户端操作redis

  • Jedis:类似于JDBC,java操作redis数据库的工具

  • 使用:

    public void test01(){
        //获取链接
        Jedis jedis = new Jedis("localhost", 6379);
        //使用Jedis
        String set = jedis.set("username", "zhangsan");
        System.out.println(set);
        String username = jedis.get("username");
        System.out.println(username);
        //关闭连接
        jedis.close();
    }
    
  • Jedis连接池:JedisPool

    //使用默认配置
    public void test02(){
        //创建连接池
        JedisPool jedisPool = new JedisPool();
        //创建redis连接
        Jedis jedis = jedisPool.getResource();
        //使用
        jedis.zadd("grade",100,"zhangsan");
        //归还连接
        jedis.close();
    }
    
    public void test03(){
        JedisPoolConfig jedisPoolConfig = new 	JedisPoolConfig();
        //最大连接池对象数
        jedisPoolConfig.setMaxTotal(50);
        //最大保持idle(空闲)状态对象数
        jedisPoolConfig.setMaxIdle(10);
        JedisPool jedisPool = new JedisPool(jedisPoolConfig, "localhost", 6379);
        Jedis jedis = jedisPool.getResource();
        jedis.zadd("grade",100,"zhangsan");
        jedis.close();
    }
    /*
    #最大活动对象数     
    redis.pool.maxTotal=1000    
    #最大能够保持idel状态的对象数      
    redis.pool.maxIdle=100  
    #最小能够保持idle状态的对象数   
    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   
    */
    
posted @ 2020-11-20 14:34  雨下整夜~  阅读(117)  评论(0)    收藏  举报