redis

作者: 不会写诗的苏轼 | 来源:发表于2023-01-28 10:50 被阅读0次
    1. 概念: redis是一款高性能的NOSQL系列的非关系型数据库

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

      有些电脑会出现问题
      1启动服务器端闪退,启动客户端:
      [问题:Could not connect to Redis at 127.0.0.1:6379:由于目标计算机积极拒绝,无法连接]
      解决:在redis根目录下打开命令行窗口,输入命令redis-server.exe redis.windows.conf后,不要关闭本窗口。
      [问题:redis-server.exe闪退问题报错QForkMasterInit: system error caught. error code=0x000005af, message=Virtual]
      解决:说明你没有设置redis的最大内存,用记事本打开redis.windows.conf最后一行加上下方代码即可。
      maxmemory 268435456
      maxheap 314572800

    3. Redis添加至windows服务:
      安装服务:redis-server --service-install redis.windows.conf --loglevel verbose
      其中参数 --loglevel verbose表示记录日志等级
      卸载服务:redis-server --service-uninstall

    4. 设置密码:
      打开redis.windows.conf文件,找到“requirepass”配置项,此处设置redis密码,如果不需要密码,可以将该配置项注释掉。配置完成后,保存文件。

    5. 命今操作:

      • redis的数据结构∶
        redis存储的是:key,value格式的数据,其中key都是字符串
        value有5种不同的数据结构:
        变量名|真实类型|作用
        :-:|:-:|:-:
    value类型 对应命令 数据格式
    字符串类型 string 存储:set key value
    获取∶get key
    删除: del key
    张三
    哈希类型 hash 存储: hset key field value
    获取: hget key field
    获取所有的field和value:hget all key
    删除:hdel key field
    列表类型 list 左添加先加a,后加b,b在a的左边,
    右添加c,c在列表 的最右边
    1.将元素加入列表左表:lpush key value
    2.将元素加入列表右边:rpush key value

    范围获取:lrange key start end

    删除并返回最左边的元素:lpop key
    删除并返回最右边的元素:rpop key
    可重复
    集合类型 set 存储: sadd key value
    获取set集合中所有元素:smembers key
    删除set集合中的某个元素:srem key value
    不可重复,没有顺序
    有序集合类型
    sorted set
    存储:zadd key score value
    获取:zrange key start end
    删除∶zren key value
    不可重复,通过 score 可排序

    通用命今:
    keys *:查询所有的键
    type key:获取键对应的value的类型
    del key:删除指定的key value

    1. 持久化
      • redis是一个内存数据库,当redis服务器重后,或重启电脑,数据会丢失,我们可以将redis内存中的数据持久化保存到硬盘的文件中。

      • redis持久化机制:
        1. RDB:默认方式,不需要进行配置,默认就使用这种机制
        在一定的间隔时间中,检测key的变化情况,然后持久化数据

        步骤:可改变此配置文件的值:
        1,编辑redis.windwos.conf文件
        900秒【15分钟】内有1次数据改变持久化数据
        save 900 1
        300秒【5分钟】内有10次数据改变持久化数据
        save 300 10
        60秒【1分钟】内有10000次数据改变持久化数据
        save 60 10000
        2,重新启动redis服务器,并指定配置文件名称
        D:\Javaweb2018\day23_redis\资料\redis\windows-64 (redis-2.8.9>redis- server.exe redis.windows.conf

        1. AOF:日志记录的方式,可以记录每一条命今的操作。可以每一次命分操作后,持久化数据

        1,编辑redis.windwos.conf文件
        appendonly no (关闭aof)--> appendonly yes(开启aof)
        appendfsync always 每一次操作都进行持久化
        appendfsync everysec 每隔一秒进行一次持久化
        appendfsync nb 不进行持久化
        2,重新启动redis服务器,并指定配置文件名称
        D:\Javaweb2018\day23_redis\资料\redis\windows-64 (redis-2.8.9>redis-
        server.exe redis.windows.conf

    Java客户端Jedis
    1. jedis:一款java操作redis数据库的工具.
    2. 使用步骤:
      1.下载jedis的jar包
      2.使用
    public class JedisTest {
        /**
         * 快速入门
         */
        @Test
        public void test01(){
            //1创建连接对象
            Jedis jedis = new Jedis("localhost",6379);
            //2操作
            jedis.set("username","zhangsan");
            //3关闭连接
            jedis.close();
        }
    }
    
    1. jedis操作redis各种数据类型
      • string
      //1.获取连接
      Jedis jedis = new Jedis();//如果使用空参构造,默认值"localhost",6379端口
      //2.操作
      //存储
      jedis.set( "username" , "zhangsan");//获取
      String username = jedis.get( "username" );
      system.out.println(username) ;
      //可以使用setex()方法存储可以指定过期时间的key value
      jedis.setex( "activecode" , 20,"hehe");//将activecode: hehe键值对存入redis,并且zo秒后自动删除该键值对
      
      
      • hash
      //2.操作//存储hash
      jedis.hset( "user" , "name" , "lisi");
      jedis.hset( "user" , "age" , "23");
      jedis.hset( "user" , "gender" , "male");
      //获取hash
      String name = jedis.hget( "user",f"name " );
      system.out.println(name) ;
      //获取hash的所有map中的数据
      Map<String,String> user = jedis.hgetAll( "user" ); // keyset
      Set<String> keySet = user.keySet( );
      for (string key : keySet) {
          //获取value
          String value = user.get( key ) ;
          system. out- println(key “:" +.value) ;
      }
      
      • list
      //2.操作l/ list存储
      jedis.lpush(  "mylist" , "a" , "b", "c");//从左边存
      jedis.rpush( "mylist" , "a" , "b","c");//从右边存
      //list范围获取
      List<String> mylist = jedis.lrange( "mylist", 0,end: -1);
      system.out.println(mylist);
      // list 弹出
      String element1 = jedis.lpop( "mylist" ); 
      system.out.println(element1);
      String element2 = jedis.rpop( "mylist"); 
      system.out.println(element2);
      //list范围获取
      List<String> mylist2 = jedis.lrange("mylist",0,-1);
      system.out.println(mylist2);
      
      • set
      //set存储
      jedis.sadd( "myset", "java" , "php" , "c++" ) ;
      //set获取
      set<String> myset = jedis.smembers("myset" );
      system.out.println( myset);
      
      • sortedset
      //2.操作
        //sortedset存储
      jedis.zadd( "mysortedset" , 3,"亚瑟");
      jedis.zadd( "mysortedset" , 30,"后商");
      jedis.zadd( "mysortedset" , 25,"孙悟空");
      // sortedset获取
      Set<String> mysortedset = jedis.zrange( "mysortedset",0,end: -1);
      
    Jedis连接池对象
     /**
         * redis连接池redisPool快速入门
         */
        @Test
        public void test02(){
            //0创建一个配置对象
            JedisPoolConfig config = new JedisPoolConfig();
            config.setMaxTotal(50);
            config.setMaxIdle(10);
            //1创建连接池对象
            JedisPool jedisPool = new JedisPool(config,"localhost",6379);
            //2连接池对象连接对象
            Jedis jdResource = jedisPool.getResource();
            //3使用方法
            jdResource.set("names","xiaoming");
            //归还数据库连接池连接
            jdResource.close();
        }
    
    • jedis连接池详细配置:

    最大活动对象数
    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
    redis.port=6379

    • Jedis工具类
      如果出现空指针异常,找不到properties文件,则必须把配置文件放到resource内。



      工具类:

    public class JedisUtil {
        private static JedisPool jedisPool;
        static{
            //读取配置文件
            InputStream is = JedisUtil.class.getClassLoader().getResourceAsStream("jedis.properties");
            //创建Properties对象
            Properties pro = new Properties();
            //关联文件
            try {
                pro.load(is);
            } catch (IOException e) {
                e.printStackTrace();
            }
            //获取数据,设置到JedisPoolConfig中
            JedisPoolConfig config = new JedisPoolConfig();
            config.setMaxTotal(Integer.parseInt(pro.getProperty("maxTotal")));
            config.setMaxIdle(Integer.parseInt(pro.getProperty("maxIdle")));
    
            //初始化JedisPool
            jedisPool = new JedisPool(config,pro.getProperty("host"),Integer.parseInt(pro.getProperty("port")));
        }
    
        /**
         * 获取连接方法
         */
        public static Jedis getJedis(){
            return jedisPool.getResource();
        }
    }
    

    测试:

        /**
         * 通过redis连接池工具获取连接
         */
        @Test
        public void test03(){
            Jedis jdResource = JedisUtil.getJedis();
            //3使用方法
            jdResource.set("names","zhangsan");
            //归还数据库连接池连接
            jdResource.close();
        }
    }
    

    相关文章

      网友评论

          本文标题:redis

          本文链接:https://www.haomeiwen.com/subject/vxodhdtx.html