redis

  1. 概念: redis是一款高性能的NOSQL系列的非關(guān)系型數(shù)據(jù)庫

  2. 安裝:
    官網(wǎng)地址:https://redis.io/
    中文官網(wǎng)地址:https://www.redis.net.cn/
    解壓直接可以使用︰
    redis.windows.conf:配置文件
    redis-cli.exe:redis的客戶端
    redis-server.exe:redis服務(wù)器端

    有些電腦會出現(xiàn)問題
    1啟動服務(wù)器端閃退,啟動客戶端:
    [問題:Could not connect to Redis at 127.0.0.1:6379:由于目標(biāo)計算機積極拒絕,無法連接]
    解決:在redis根目錄下打開命令行窗口,輸入命令redis-server.exe redis.windows.conf后,不要關(guān)閉本窗口。
    [問題:redis-server.exe閃退問題報錯QForkMasterInit: system error caught. error code=0x000005af, message=Virtual]
    解決:說明你沒有設(shè)置redis的最大內(nèi)存,用記事本打開redis.windows.conf最后一行加上下方代碼即可。
    maxmemory 268435456
    maxheap 314572800

  3. Redis添加至windows服務(wù):
    安裝服務(wù):redis-server --service-install redis.windows.conf --loglevel verbose
    其中參數(shù) --loglevel verbose表示記錄日志等級
    卸載服務(wù):redis-server --service-uninstall

  4. 設(shè)置密碼:
    打開redis.windows.conf文件,找到“requirepass”配置項,此處設(shè)置redis密碼,如果不需要密碼,可以將該配置項注釋掉。配置完成后,保存文件。

  5. 命今操作:

    • redis的數(shù)據(jù)結(jié)構(gòu)∶
      redis存儲的是:key,value格式的數(shù)據(jù),其中key都是字符串
      value有5種不同的數(shù)據(jù)結(jié)構(gòu):
      變量名|真實類型|作用
      :-:|:-:|:-:
value類型 對應(yīng)命令 數(shù)據(jù)格式
字符串類型 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

范圍獲?。簂range key start end

刪除并返回最左邊的元素:lpop key
刪除并返回最右邊的元素:rpop key
可重復(fù)
集合類型 set 存儲: sadd key value
獲取set集合中所有元素:smembers key
刪除set集合中的某個元素:srem key value
不可重復(fù),沒有順序
有序集合類型
sorted set
存儲:zadd key score value
獲取:zrange key start end
刪除∶zren key value
不可重復(fù),通過 score 可排序

通用命今:
keys *:查詢所有的鍵
type key:獲取鍵對應(yīng)的value的類型
del key:刪除指定的key value

  1. 持久化
    • redis是一個內(nèi)存數(shù)據(jù)庫,當(dāng)redis服務(wù)器重后,或重啟電腦,數(shù)據(jù)會丟失,我們可以將redis內(nèi)存中的數(shù)據(jù)持久化保存到硬盤的文件中。

    • redis持久化機制:
      1. RDB:默認(rèn)方式,不需要進行配置,默認(rèn)就使用這種機制
      在一定的間隔時間中,檢測key的變化情況,然后持久化數(shù)據(jù)

      步驟:可改變此配置文件的值:
      1,編輯redis.windwos.conf文件
      900秒【15分鐘】內(nèi)有1次數(shù)據(jù)改變持久化數(shù)據(jù)
      save 900 1
      300秒【5分鐘】內(nèi)有10次數(shù)據(jù)改變持久化數(shù)據(jù)
      save 300 10
      60秒【1分鐘】內(nèi)有10000次數(shù)據(jù)改變持久化數(shù)據(jù)
      save 60 10000
      2,重新啟動redis服務(wù)器,并指定配置文件名稱
      D:\Javaweb2018\day23_redis\資料\redis\windows-64 (redis-2.8.9>redis- server.exe redis.windows.conf

      1. AOF:日志記錄的方式,可以記錄每一條命今的操作。可以每一次命分操作后,持久化數(shù)據(jù)

      1,編輯redis.windwos.conf文件
      appendonly no (關(guān)閉aof)--> appendonly yes(開啟aof)
      appendfsync always 每一次操作都進行持久化
      appendfsync everysec 每隔一秒進行一次持久化
      appendfsync nb 不進行持久化
      2,重新啟動redis服務(wù)器,并指定配置文件名稱
      D:\Javaweb2018\day23_redis\資料\redis\windows-64 (redis-2.8.9>redis-
      server.exe redis.windows.conf

Java客戶端Jedis
  1. jedis:一款java操作redis數(shù)據(jù)庫的工具.
  2. 使用步驟:
    1.下載jedis的jar包
    2.使用
public class JedisTest {
    /**
     * 快速入門
     */
    @Test
    public void test01(){
        //1創(chuàng)建連接對象
        Jedis jedis = new Jedis("localhost",6379);
        //2操作
        jedis.set("username","zhangsan");
        //3關(guān)閉連接
        jedis.close();
    }
}
  1. jedis操作redis各種數(shù)據(jù)類型
    • string
    //1.獲取連接
    Jedis jedis = new Jedis();//如果使用空參構(gòu)造,默認(rèn)值"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中的數(shù)據(jù)
    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創(chuàng)建一個配置對象
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(50);
        config.setMaxIdle(10);
        //1創(chuàng)建連接池對象
        JedisPool jedisPool = new JedisPool(config,"localhost",6379);
        //2連接池對象連接對象
        Jedis jdResource = jedisPool.getResource();
        //3使用方法
        jdResource.set("names","xiaoming");
        //歸還數(shù)據(jù)庫連接池連接
        jdResource.close();
    }
  • jedis連接池詳細(xì)配置:

最大活動對象數(shù)
redis.pool.maxTotal=1000
最大能夠保持idel狀態(tài)的對象數(shù)
redis.pool.maxIdle=100
最小能夠保持idel狀態(tài)的對象數(shù)
redis.pool.minIdle=50
當(dāng)池內(nèi)沒有返回對象時,最大等待時間
redis.pool.maxWaitMillis=10000
當(dāng)調(diào)用borrow Object方法時,是否進行有效性檢查
redis.pool.testOnBorrow=true
當(dāng)調(diào)用return Object方法時,是否進行有效性檢查
redis.pool.testOnReturn=true
空閑鏈接”檢測線程,檢測的周期,毫秒數(shù)。如果為負(fù)值,表示不運行“檢測線程”。默認(rèn)為-1.
redis.pool.timeBetweenEvictionRunsMillis=30000
向調(diào)用者輸出“鏈接”對象時,是否檢測它的空閑超時;
redis.pool.testWhileIdle=true
對于“空閑鏈接”檢測線程而言,每次檢測的鏈接資源的個數(shù)。默認(rèn)為3.
redis.pool.numTestsPerEvictionRun=50
redis服務(wù)器的IP
redis.ip=xxxxxx
redis服務(wù)器的Port
redis.port=6379

  • Jedis工具類
    如果出現(xiàn)空指針異常,找不到properties文件,則必須把配置文件放到resource內(nèi)。



    工具類:

public class JedisUtil {
    private static JedisPool jedisPool;
    static{
        //讀取配置文件
        InputStream is = JedisUtil.class.getClassLoader().getResourceAsStream("jedis.properties");
        //創(chuàng)建Properties對象
        Properties pro = new Properties();
        //關(guān)聯(lián)文件
        try {
            pro.load(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
        //獲取數(shù)據(jù),設(shè)置到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");
        //歸還數(shù)據(jù)庫連接池連接
        jdResource.close();
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1 Redis介紹1.1 什么是NoSql為了解決高并發(fā)、高可擴展、高可用、大數(shù)據(jù)存儲問題而產(chǎn)生的數(shù)據(jù)庫解決方...
    克魯?shù)吕?/span>閱讀 5,707評論 0 36
  • 1 初認(rèn)始redis 1.1起源 redis是一個開源的基于c語言編寫,支持網(wǎng)絡(luò)也開源支持內(nèi)存持久化的日志類型,k...
    陳朝輝_39f7閱讀 1,134評論 0 0
  • [if !supportLists]1.1.1[endif]安裝環(huán)境 redis是C語言開發(fā),安裝redis需要先...
    三萬_chenbing閱讀 667評論 0 1
  • [TOC] Redis相關(guān)內(nèi)容 Redis是單線程的,它是基于內(nèi)存操作,CPU不是Redis的性能瓶頸,他的瓶頸是...
    拔魔Jian閱讀 264評論 0 0
  • redis概念下載安裝命令操作數(shù)據(jù)結(jié)構(gòu)持久化操作使用Java客戶端操作redis Redis 概念: redis是...
    abboo閱讀 216評論 0 0

友情鏈接更多精彩內(nèi)容