主頁 > 後端開發 > Redis的安裝使用

Redis的安裝使用

2021-10-20 06:07:58 後端開發

1.Redis是什么

Redis是一個使用ANSI C(C語言) 撰寫的開源的高性能的Key-Value的NoSQL資料庫(非關系型資料庫),  

2.Redis特點

1.基于記憶體 2.可持久化資料 3.具有豐富的資料結構型別,適應非關系型資料的存盤需求 4.支持絕大多數主流開發語言,如C、C++、Java、Python、R、JavaScript等, 5.支持集群模式,高效、穩定,  

3.資料模型(A)

1.鍵值對形式, 2.Redis的資料結構型別,指的就是Redis值的結構型別, 0

4.Redis作用

1.本質是資料庫,能存盤資料, Redis能靈活處理非關系型資料的讀、寫問題,是對MySQL等關系型資料庫的補充, 新浪微博就是使用Redis集群做資料庫,   2.快取資料, 所謂快取,就是將資料加載到記憶體中后直接使用,而不是每次都通過IO流從磁盤上讀取,好處:讀寫效率高, 而Redis則是將資料直接存盤在記憶體中,只有當記憶體空間不足時,將部分資料持久化到磁盤上,  

5.Redis安裝(Linux)

Redis官方只提供了原始碼,并沒有提供經過編譯之后的安裝包,因此,安裝Redis,要先編譯、后安裝,(即原始碼安裝方式)  

5.1 redis安裝步驟

1.下載,上傳到Linux服務器,并解壓 2.預編譯(實際上是檢查編譯環境的程序) 進入目錄: cd /opt/soft/redis-3.2.9/deps/jemalloc 執行預編譯 ./configure 在預編譯的程序中,會檢測安裝redis所需的相關依賴,依次安裝即可, 如:缺少c編譯環境 yum -y install gcc-c++   預編譯不是必須的步驟,它只是在檢查編譯程序中需要的環境是否滿足,通常原始碼包中,都有一個可執行的configure腳本,這個腳本執行預編譯的腳本,但是有一些原始碼包中,沒有該檔案,可以省略預編譯步驟,   3.編譯 進入/opt/soft/redis-3.2.9/src make 4.安裝 進入/opt/soft/redis-3.2.9/src make install 5.啟動redis服務端(指定組態檔) 拷貝redis.conf檔案到/etc 目錄下,方便管理, cp /opt/soft/redis-3.2.9/redis.conf /etc/ /usr/local/bin/redis-server /etc/redis.conf   0 6.啟動redis客戶端,登陸 /usr/local/bin/redis-cli 0  

6.redis.conf常用配置說明

6.1 requirepass (設定密碼)

給redis設定密碼 在/etc/redis.conf中設定密碼(退出redis登錄用quit) 0 找到上面這行代碼改成 0 設定密碼后需要重新啟動redis服務端 才會生效   在客戶端使用auth命令,驗證密碼, 0  

6.2 databases(資料庫)

Redis默認有16個資料庫,尋址角標從0開始, 默認連接db0 0 客戶端使用select命令可切換資料庫 0  

6.3 port(埠)

指定redis的服務埠,默認6379 0  

6.4 daemonize(后臺行程)

Redis默認關閉后臺行程模式,改成yes,redis服務在后臺啟動, 0    

6.5 loglevel(日志級別)

0  

6.6 logfile(日志輸出檔案)

Redis日志輸出目錄,默認不輸出日志到檔案, 0  

6.7 dbfilename(持久化檔案名)、 dir(檔案路徑)

指定資料持久化的檔案名及目錄, 0  

7.將redis添加為系統服務

7.1 第一步:開啟后臺模式

修改組態檔,將daemonize改為yes  

7.2 第二步:創建shell腳本

Linux系統服務,在/etc/init.d目錄下創建redis腳本
###########################
#chkconfig: 2345 10 90
#description: Start and Stop redis
PATH=/usr/local/bin:/sbin:/usr/bin:/bin
   
REDISPORT=6379
EXEC=/usr/local/bin/redis-server
REDIS_CLI=/usr/local/bin/redis-cli
##判斷redis是否啟動了 
PIDFILE=/var/run/redis_6379.pid
CONF="/etc/redis.conf"
PASSWORD=$(cat $CONF|grep '^\s*requirepass'|awk '{print $2}'|sed 's/"//g')
   
case "$1" in
    start)
        if [ -f $PIDFILE ]
        then
                echo "$PIDFILE exists, process is already running or crashed"
        else
                echo "Starting Redis server..."
                $EXEC $CONF
        fi
        if [ "$?"="0" ]
        then
              echo "Redis is running..."
        fi
        ;;
    stop)
        if [ ! -f $PIDFILE ]
        then
                echo "$PIDFILE does not exist, process is not running"
        else
                PID=$(cat $PIDFILE)
                echo "Stopping ..."
if [ -z $PASSWORD ]
then 
    $REDIS_CLI -p $REDISPORT shutdown
else
    $REDIS_CLI -a $PASSWORD -p $REDISPORT shutdown
fi
                #$REDIS_CLI -p $REDISPORT SHUTDOWN
                while [ -x ${PIDFILE} ]
               do
                    echo "Waiting for Redis to shutdown ..."
                    sleep 1
                done
                echo "Redis stopped"
        fi
        ;;
   restart|force-reload)
        ${0} stop
        ${0} start
        ;;
  *)
    echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2
        exit 1
esac
##############################

7.3 第三步:添加shell腳本可執行權限

chmod +x /etc/init.d/redis

7.4 第四步:添加Redis開機啟動

7.4 第四步:添加Redis開機啟動

8.Redis的值(value)的資料結構型別

一般說Redis的資料結構型別,指的就是redis的值value的型別; Redis常用的資料結構型別:string、list、set、sortedSet、hash  

9.Redis的使用

9.1 key的型別

redis的key 值是二進制安全的,這意味著可以用任何二進制序列作為key值,從形如”foo”的簡單字串到一個JPEG檔案的內容都可以,空字串也是有效key值, redis建議使用字串做為key的型別  

9.2 key取值規范

1.鍵值不需要太長,消耗記憶體,在資料中查找這類鍵值的計算成本較高 2.鍵值不宜過短,可讀性較差,通常建議見名知意, 例:user:id:1:username;user:id:1:password ,通過user:id:1*查詢,這就是一種命名方式(不一定要使用這種方式)  

9.3 Key命令

 

 

9.4 string型別

string型別是redis最常用的資料結構型別,存盤的值為字串,

string型別相關命令

 

 

String型別的應用場景

1.做與統計有關的業務,如新浪微博(微信朋友圈)中的點贊功能 2.解決多執行緒的執行緒安全問題, Redis的key是單執行緒模式,這就意味一瞬間只有一個執行緒能夠持有這個key,所以可以使用redis解區域分涉及執行緒安全的業務,比如說搶購、秒殺, 再比如學習多執行緒時模擬買票視窗的賣票業務,  

9.5 List型別

 

特點:

1.基于Linked List實作 2.元素是字串型別 3.串列頭尾增刪快,中間增刪慢,增刪元素是常態 4.元素可以重復出現 5.最多包含2^32-1元素 串列的索引:從左至右,從0開始;從右至左,從-1開始  

List型別相關命令

 

 

List型別應用場景

1.處理排名類業務,如新浪微博評論、論壇回帖樓層等, 2.聊天室  

9.6 Hash型別(散列)

 

特點

0 1.由Field(欄位)和與之關聯的value組成map鍵值對 2.field和value是字串型別; 3.一個hash中最多包含2^32-1鍵值對,  

Hash相關命令

 

 

Hash的作用

節約記憶體空間: redis每創建一個鍵,都會為這個鍵儲存一些附加的管理資訊(比如這個鍵的型別,這個鍵最后一次被訪問的時間等等)可以說redis的key相對于值來說,更珍貴!所以資料庫里面的鍵越多,redis資料庫服務器在儲存附加管理資訊方面耗費的記憶體就越多,在獲取key對應的value值時cpu的開銷也會更多 , Hash結構可以將具有關聯關系的一組key-value,存盤到同一個hash結構中,從而減少key的數量,所以在能使用hash的時候盡量使用hash,   不適合使用Hash的場景 在需要只對hash中某個欄位設定過期時,就不建議使用hash,Redis的key的過期功能只能對鍵操作,而Hash結構不能單獨對某一個filed設定過期功能,  

9.7 Set型別(集合)

特點

1.無序的、去重的; 2.元素是字串型別; 3.最多包含2^32-1元素,  

Set相關命令

 

 

Set應用場景

新浪微博的共同關注:當用戶訪問另一個用戶的時候,會顯示出兩個用戶共同關注哪些相同的用戶(交集)  

9.8 SortedSet型別(有序集合)

特點

1.類似Set集合; 2.有序的、去重的; 3.元素是字串型別; 4.每一個元素都關聯著一個浮點分數值(Score),并按照分數值從小到大的順序排列集合中的元素,分數值可以相同,相同時按字典順序排列 5.最多包含2^32-1元素  

SortedSet型別相關命令

 

 

SortedSet型別適用場景

適用于需要有序且唯一的業務或操作: 如,網易音樂排行榜: 每首歌的歌名作為元素(唯一、不重復) 每首歌的播放次數作為分值 用zrevrange來獲取播放次數最多的歌曲(就是最多播放榜了,云音樂熱歌榜,沒有競價,沒有權重)  

10.使用Jedis連接redis服務器

Jedis是Redis官方推薦的Java連接開發工具,可以通過java代碼操作redis資料庫,就類似于jdbc  

10.1 使用jedis連接redis可能會出現的問題及解決方案:

1.ip系結問題 0 使用Jedis連接redis服務器需要把Redis的組態檔redis.conf里的bind 127.0.0.1(或bind localhost)注釋掉,這句話的意思是僅允許本機才能訪問,我們需要讓redis服務器允許其他主機訪問 0   2.保護模式(如果設定了密碼可以進行密碼驗證,不用關閉保護模式) DENIED Redis is running in protected mode because protected mode is enabled… 關閉保護模式:把Redis的組態檔redis.conf中的protected-mode 的yes改成no 0  

10.2 Jedis 相關jar包匯入

  0  

10.3 Jedis連接redis服務端

package com.gjs.jedis;

import org.junit.Test;

import redis.clients.jedis.Jedis;

public class TestJedis {
    
    @Test
    public void testJedisConnect() throws Exception {
        //創建客戶端指定連接服務器端主機ip和埠,埠不指定時默認使用6379
        Jedis jedis = new Jedis("192.168.192.128", 6379);
        System.out.println("連接redis服務器端成功!");
        jedis.auth("1234"); //登錄驗證
        
        //測驗連接
        System.out.println("redis服務器是否運行:"+jedis.ping());
        System.out.println("redis服務器資訊:"+jedis.info());
        
        //關閉連接
        jedis.close();
    }
}

10.4 Key測驗

jedis類中大部分方法名都與對應的命令同名
@Test
    public void testKey() throws Exception {
        //創建客戶端指定連接服務器端主機ip和埠,埠不指定時默認使用6379
        Jedis jedis = new Jedis("192.168.192.128", 6379);
        System.out.println("連接redis服務器端成功!");
        //登錄驗證
        jedis.auth("1234");

        jedis.set("name", "zhangsan");//加入資料
        System.out.println("獲取key對應的值:"+jedis.get("name"));
        Set<String> keys = jedis.keys("*");//使用通配符進行模糊查詢
        System.out.println("獲取所有key的值:"+keys);
        //關閉連接
        jedis.close();        
    }

10.5 List測驗

@Test
    public void testList() throws Exception {
        //創建客戶端指定連接服務器端主機ip和埠,埠不指定時默認使用6379
        Jedis jedis = new Jedis("192.168.192.128", 6379);
        System.out.println("連接redis服務器端成功!");
        //登錄驗證
        jedis.auth("1234");    
        
        jedis.lpush("list", new String[] {"a","c","b"});//添加資料
        Long len = jedis.llen("list");//獲取長度
        System.out.println("list長度:"+len);
        System.out.println("list元素:"+jedis.lrange("list", 0, len));
        System.out.println("指定索引位置的元素:"+jedis.lindex("list", 1));
        
        //關閉連接
        jedis.close();        
    }

10.6 Hash測驗

@Test
    public void testHash() throws Exception {
        //創建客戶端指定連接服務器端主機ip和埠,埠不指定時默認使用6379
        Jedis jedis = new Jedis("192.168.192.128", 6379);
        System.out.println("連接redis服務器端成功!");
        //登錄驗證
        jedis.auth("1234");    
        //添加資料
        jedis.hset("user", "id", "1");
        jedis.hset("user", "name", "zhangsan");
        jedis.hset("user", "password", "123456");
        //獲取所有元素
        Map<String, String> user = jedis.hgetAll("user");
        System.out.println("獲取hash的所有欄位值:"+user);
        
        //關閉連接
        jedis.close();        
    }

10.7 Set測驗

    @Test
    public void testSet() throws Exception {
        //創建客戶端指定連接服務器端主機ip和埠,埠不指定時默認使用6379
        Jedis jedis = new Jedis("192.168.192.128", 6379);
        System.out.println("連接redis服務器端成功!");
        //登錄驗證
        jedis.auth("1234");    
        //添加資料
        jedis.sadd("set1",new String[] {"a","s","d","f","g"});
        jedis.sadd("set2", new String[] {"a","s","z","x"});
        //獲取所有元素
        Set<String> set1 = jedis.smembers("set1");
        System.out.println("獲取set的所有元素:"+set1);
        
        System.out.println("獲取元素數量:"+jedis.scard("set1"));
        
        //獲取交并補集,方法引數是可變的
        Set<String> inter = jedis.sinter("set1","set2");
        System.out.println("獲取交集:"+inter);
        Set<String> union = jedis.sunion("set1","set2");
        System.out.println("獲取并集:"+union);
        Set<String> diff = jedis.sdiff("set1","set2");
        System.out.println("獲取差集:"+diff);
        
        //關閉連接
        jedis.close();        
    }

10.8 SortedSet測驗

    @Test
    public void testSortedSet() throws Exception {
        //創建客戶端指定連接服務器端主機ip和埠,埠不指定時默認使用6379
        Jedis jedis = new Jedis("192.168.192.128", 6379);
        System.out.println("連接redis服務器端成功!");
        //登錄驗證
        jedis.auth("1234");    
        
        //添加資料
        Map<String, Double> scoreMembers = new HashMap<>();
        scoreMembers.put("a", 1d);
        scoreMembers.put("b", 3d);
        scoreMembers.put("c", 2d);
        jedis.zadd("sortSet", scoreMembers);
        //獲取資料
        //獲取分數值在指定區間的元素并按分數值由小到大排序
        Set<String> zrange = jedis.zrange("sortSet", 0, 3);
        System.out.println(zrange);
        
        //關閉連接
        jedis.close();        
    }

 

11.Redis持久化

Redis持久化,就是將記憶體中的資料,永久保存到磁盤上, Redis持久化有兩種方式:RDB(Redis DB)、AOF(AppendOnlyFile),  

11.1 RDB(快照模式)

在默認情況下,Redis 將資料庫快照保存在名字為dump.rdb的二進制檔案中,可以在redis.conf組態檔中修改持久化資訊, 0 save 900 1 表示在900秒內,至少更新了1條資料,Redis就將資料持久化到硬碟 save 300 10 表示在300內,至少更新了10條資料,Redis就會觸發將資料持久化到硬碟 save 60 10000 表示60秒內,至少更新了10000條資料,Redis就會觸發將資料持久化到硬碟  

11.1.1 策略

1.自動:BGSAVE 按照組態檔中的條件滿足就執行BGSAVE;非阻塞,Redis服務正常接收處理客戶端請求; Redis會folk()一個新的子行程來創建RDB檔案,子行程處理完后會向父行程發送一個信號,通知它處理完畢,父行程用新的dump.rdb替代舊檔案,   2.手動:SAVE 由客戶端(redis-cli)發起SAVE命令;阻塞Redis服務,無法回應客戶端請求;創建新的dump.rdb替代舊檔案,  

11.1.2 優點

1.執行效率高; 2.恢復大資料集速度較AOF快,  

11.1.3 缺點

1.會丟失最近寫入、修改的而未能持久化的資料; 2.folk程序非常耗時,會造成毫秒級不能回應客戶端請求,  

11.2 AOF(追加模式、文本重演)

AOF(Append only file),采用追加的方式保存,默認檔案appendonly.aof,記錄所有的寫操作命令,在服務啟動的時候使用這些命令就可以還原資料庫,AOF默認關閉,需要在組態檔中手動開啟, 0  

11.2.1 寫入機制

說明:AOF機制,添加了一個記憶體緩沖區(buffer), 1.將內容寫入緩沖區 2.當緩沖區被填滿、或者用戶手動執行fsync、或者系統根據指定的寫入磁盤策略自動呼叫fdatasync命令,才將緩沖區里的內容真正寫入磁盤里, 3.在緩沖區里的內容未寫入磁盤之前,可能會丟失,  

11.2.2 寫入磁盤的策略

appendfsync選項,這個選項的值可以是always、everysec或者no 0 Always:服務器每寫入一個命令,就呼叫一次fdatasync,將緩沖區里面的命令寫入到硬碟,這種模式下,服務器出現故障,也不會丟失任何已經成功執行的命令資料 Everysec(默認):服務器每一秒重呼叫一次fdatasync,將緩沖區里面的命令寫入到硬碟,這種模式下,服務器出現故障,最多只丟失一秒鐘內的執行的命令資料 No:服務器不主動呼叫fdatasync,由作業系統決定何時將緩沖區里面的命令寫入到硬碟,這種模式下,服務器遭遇意外停機時,丟失命令的數量是不確定的 運行速度:always的速度慢,everysec和no都很快  

11.2.3 AOF重寫機制

AOF檔案過大,合并重復的操作,AOF會使用盡可能少的命令來記錄,

重寫程序

1.folk一個子行程負責重寫AOF檔案 2.子行程會創建一個臨時檔案寫入AOF資訊 3.父行程會開辟一個記憶體緩沖區接收新的寫命令 4.子行程重寫完成后,父行程會獲得一個信號,將父行程接收到的新的寫操作由子行程寫入到臨時檔案中 5.新檔案替代舊檔案 重寫的本質:就是將操作同一個鍵的命令,合并,從而減小AOF檔案的體積 0  

AOF重寫觸發機制

1.手動:客戶端向服務器發送BGREWRITEAOF命令 2.自動:組態檔中的選項,自動執行BGREWRITEAOF命令   0 auto-aof-rewrite-min-size , 觸發AOF重寫所需的最小體積:只要在AOF檔案的體積大于等于size時,才會考慮是否需要進行AOF重寫,這個選項用于避免對體積過小的AOF檔案進行重寫 auto-aof-rewrite-percentage 指定觸發重寫所需的AOF檔案體積百分比:當AOF檔案的體積大于auto-aof-rewrite-min-size指定的體積,并且超過上一次重寫之后的AOF檔案體積的percent %時,就會觸發AOF重寫,(如果服務器剛剛啟動不久,還沒有進行過AOF重寫,那么使用服務器啟動時載入的AOF檔案的體積來作為基準值),將這個值設定為0表示關閉自動AOF重寫,  

11.2.4 優點

寫入機制:默認Everysec每秒執行,性能很好不阻塞服務,最多丟失一秒的資料; 重寫機制:優化AOF檔案,如果誤操作了(FLUSHALL等),只要AOF未被重寫,停止服務移除AOF檔案尾部FLUSHALL命令,重啟Redis,可以將資料集恢復到FLUSHALL 執行之前的狀態,  

11.2.5 缺點

1.相同資料集,AOF檔案體積較RDB大了很多; 2.恢復資料庫速度較RDB慢(文本,命令重演),     原文鏈接:https://www.cnblogs.com/gaojinshun/p/15423790.html 作者:ki16 出處:https://www.cnblogs.com/gaojinshun/ 本文著作權歸作者和博客園共有,歡迎轉載,但未經作者同意必須在文章頁面給出原文連接,否則保留追究法律責任的權利,

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/325228.html

標籤:Java

上一篇:JDK成長記9:集合篇的總結和練習

下一篇:如何在xamarin.forms.mapsiOSc#中單擊時更改圖釘圖示

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more