redis

2023-01-28  本文已影响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();
    }

最大活动对象数
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

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();
    }
}
上一篇 下一篇

猜你喜欢

热点阅读