NoSQL之Redis配置與管理

目錄

一、關系型數據庫和非關系型數據庫

1.關系型數據庫

2.非關系型數據庫

3.關系型數據庫和非關系型數據庫區別

二、Redis

1.Redis簡介

2.Redis 的優點

3.Redis 使用場景

4.Redis的數據類型

5.哪些數據適合放入緩存中?

6.Redis為什么這么快?

三、Redis 安裝部署

四、Redis 命令工具

1.redis-cli 命令行工具

2.redis-benchmark 測試工具

3.Redis 數據庫常用命令

4.Redis 多數據庫常用命令


一、關系型數據庫和非關系型數據庫

1.關系型數據庫

●一個結構化的數據庫,創建在關系模型基礎上

●一般面向于記錄

●包括Oracle、MySQL、SQLServer、Microsoft Access、DB2等

2.非關系型數據庫

●除了主流的關系型數據庫外的數據庫,都認為是非關系型

●包括Redis、MongBD、Hbase、Memcached等

3.關系型數據庫和非關系型數據庫區別

1)數據存儲方式不同

關系型和非關系型數據庫的主要差異是數據存儲的方式。關系型數據天然就是表格式的,因此存儲在數據表的行和列中。數據表可以彼此關聯協作存儲,也很容易提取數據。
與其相反,非關系型數據不適合存儲在數據表的行和列中,而是大塊組合在一起。非關系型數據通常存儲在數據集中,就像文檔、鍵值對或者圖結構。你的數據及其特性是選擇數據存儲和提取方式的首要影響因素。

2)擴展方式不同

SQL和NoSQL數據庫最大的差別可能是在擴展方式上,要支持日益增長的需求當然要擴展。
要支持更多并發量,SQL數據庫是縱向擴展,也就是說提高處理能力,使用速度更快速的計算機,這樣處理相同的數據集就更快了。因為數據存儲在關系表中,操作的性能瓶頸可能涉及很多個表,這都需要通過提高計算機性能來克服。雖然SQL數據庫有很大擴展空間,但最終肯定會達到縱向擴展的上限。
而NoSQL數據庫是橫向擴展的。因為非關系型數據存儲天然就是分布式的,NoSQL數據庫的擴展可以通過給資源池添加更多普通的數據庫服務器(節點)來分擔負載。

3)對事務性的支持不同

關系型數據庫遵循ACID規則(原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability))。
NoSQL數據庫遵循BASE原則(基本可用(Basically Availble)、軟/柔性事務(Soft-state)、最終一致性(Eventual Consistency))。
由于關系型數據庫的數據強一致性,所以對事務的支持很好。關系型數據庫支持對事務原子性細粒度控制,并且易于回滾事務。
NoSQL數據庫是在CAP(一致性、可用性、分區容忍度)中任選兩項,因為基于節點的分布式系統中,不可能同時全部滿足,所以對事務的支持不是很好。

二、Redis

1.Redis簡介

Redis(遠程字典服務器) 是一個開源的、使用 C 語言編寫的 NoSQL 數據庫。
Redis 基于內存運行并支持持久化,采用key-value(鍵值對)的存儲形式,是目前分布式架構中不可或缺的一環。

Redis服務器程序是單進程模型,也就是在一臺服務器上可以同時啟動多個Redis進程,Redis的實際處理速度則是完全依靠于主進程的執行效率。若在服務器上只運行一個Redis進程,當多個客戶端同時訪問時,服務器的處理能力是會有一定程度的下降;若在同一臺服務器上開啟多個Redis進程,Redis在提高并發處理能力的同時會給服務器的CPU造成很大壓力。即:在實際生產環境中,需要根據實際的需求來決定開啟多少個Redis進程。若對高并發要求更高一些,可能會考慮在同一臺服務器上開啟多個進程。若CPU資源比較緊張,采用單進程即可。

2.Redis 的優點

1)具有極高的數據讀寫速度:數據讀取的速度最高可達到 110000 次/s,數據寫入速度最高可達到 81000 次/s。
2)支持豐富的數據類型:支持 key-value、Strings、Lists、Hashes、Sets 及 Sorted Sets 等數據類型操作。
3)支持數據的持久化:可以將內存中的數據保存在磁盤中,重啟的時候可以再次加載進行使用。
4)原子性:Redis 所有操作都是原子性的。
5)支持數據備份:即 master-salve 模式的數據備份。

3.Redis 使用場景

Redis作為基于內存運行的數據庫,是一個高性能的緩存,一般應用在Session緩存、隊列、排行榜、計數器、最近最熱文章、最近最熱評論、發布訂閱等。
Redis 適用于數據實時性要求高、數據存儲有過期和淘汰特征的、不需要持久化或者只需要保證弱一致性、邏輯簡單的場景。

4.Redis的數據類型

類型簡介特性場景
string(字符串)二進制安全可以包含任何數據,比如jpg圖片或者序列化對象...

hash(字典)

鍵值對集合,即編程語言中
的map類型
適合存儲對象,并且可以像數據庫中的update一個屬性一樣只修改某一項屬性值存儲、讀取、修改用戶屬性
List(列表)鏈表(雙向鏈表)增刪快,提供了操作某一元素的api最新消息排行;消息隊列
set(集合)hash表實現,元素不重復添加,刑除,查找的復雜度都是
O(1),提供了求交集,并集、差集的塌作
共同好友;利用唯一性:統計訪問網站的所有IP
sorted set(有序集合)將set中的元素增加一個權重參數score;元素按score有序排列教據插入集合時,已經進行了天然排序排行榜:帶權重的消息隊列

5.哪些數據適合放入緩存中?

1)即時性。例如查詢最新的物流狀態信息。
2)數據一致性要求不高。例如門店信息,修改后,數據庫中已經改了,五分鐘后緩存中才是最新的,但不影響功能使用。
3)訪問量大且更新頻率不高,例如網站首頁的廣告信息,訪問量大,但是不會經常變化。

6.Redis為什么這么快?

1)Redis是一款純內存結構,避免了磁盤I/O等耗時操作。
2)Redis命令處理的核心模塊為單線程,不存在多線程切換而消耗CPU,不用考慮各種鎖的問題,不存在加鎖、釋放鎖的操作,沒有因為可能出現死鎖而導致性能消耗。
3)采用了 I/O 多路復用機制,大大提升了并發效率。

注意:在 Redis 6.0 中新增加的多線程也只是針對處理網絡請求過程采用了多線性,而數據的讀寫命令,仍然是單線程處理的。

三、Redis 安裝部署

1.環境準備

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config

2.修改內核參數

vim /etc/sysctl.conf
vm.overcommit_memory = 1 ? ? ? ? ? ? ? ? ? ? #內核允許超量使用內存直到用完為止,防止OOM殺死進程
net.core.somaxconn = 2048 ? ? ? ? ? ? ? ? ? ?#指定處于監聽狀態的連接請求隊列的最大長度sysctl -p

3.安裝redis

這里需要提前準備redis-7.0.9.tar.gz安裝包

yum install -y gcc gcc-c++ maketar zxvf /opt/redis-7.0.9.tar.gz -C /opt/
cd /opt/redis-7.0.9
make
make PREFIX=/usr/local/redis install
#由于Redis源碼包中直接提供了 Makefile 文件,所以在解壓完軟件包后,不用先執行 ./configure 進行配置,可直接執行 make 與 make install 命令進行安裝。

4.創建redis工作目錄

mkdir /usr/local/redis/{conf,log,data}cp /opt/redis-7.0.9/redis.conf /usr/local/redis/conf/useradd -M -s /sbin/nologin redis
chown -R redis.redis /usr/local/redis/

5.環境變量

vim /etc/profile?
PATH=$PATH:/usr/local/redis/bin?? ??? ?#增加一行source /etc/profile

6.修改配置文件

vim /usr/local/redis/conf/redis.confbind 127.0.0.1 192.168.80.10?? ??? ??? ??? ??? ?#87行,添加 監聽的主機地址
protected-mode no?? ??? ??? ??? ??? ?#111行,將本機訪問保護模式設置no。如果開啟了,那么在沒有設定bind ip且沒有設密碼的情況下,Redis只允許接受本機的響應
port 6379?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?#138行,Redis默認的監聽6379端口
daemonize yes?? ??? ??? ??? ??? ??? ??? ??? ??? ?#309行,設置為守護進程,后臺啟動
pidfile /usr/local/redis/log/redis_6379.pid?? ??? ?#341行,指定 PID 文件
logfile "/usr/local/redis/log/redis_6379.log"?? ?#354行,指定日志文件
dir /usr/local/redis/data?? ??? ??? ??? ??? ??? ?#504行,指定持久化文件所在目錄
requirepass abc123?? ??? ??? ??? ??? ??? ??? ??? ?#1037行,增加一行,設置redis密碼

7.定義systemd服務管理腳本

vim /usr/lib/systemd/system/redis-server.service
[Unit]
Description=Redis Server
After=network.target[Service]
User=redis
Group=redis
Type=forking
TimeoutSec=0
PIDFile=/usr/local/redis/log/redis_6379.pid
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true[Install]
WantedBy=multi-user.target

8.啟動服務

systemctl start redis-server
systemctl enable redis-servernetstat -lntp | grep 6379

四、Redis 命令工具

redis-server:Redis 服務器啟動命令
redis-benchmark:性能測試工具,用于檢測 Redis 在本機的運行效率
redis-check-aof:修復有問題的 AOF 持久化文件
redis-check-rdb:修復有問題的 RDB 持久化文件
redis-cli:Redis 客戶端命令行工具
redis-sentinel:Redis 哨兵集群使用

1.redis-cli 命令行工具

語法:redis-cli -h host -p port [-a password]
-h :指定遠程主機
-p :指定 Redis 服務的端口號
-a :指定密碼,未設置數據庫密碼可以省略-a 選項
若不添加任何選項表示,則使用 127.0.0.1:6379 連接本機上的 Redis 數據庫

2.redis-benchmark 測試工具

redis-benchmark 是官方自帶的 Redis 性能測試工具,可以有效的測試 Redis 服務的性能。
基本的測試語法:redis-benchmark [選項] [選項值]。
-h :指定服務器主機名。
-p :指定服務器端口。
-s :指定服務器 socket
-c :指定并發連接數。 ?
-n :指定請求數。
-d :以字節的形式指定 SET/GET 值的數據大小。
-k :1=keep alive 0=reconnect 。
-r :SET/GET/INCR 使用隨機 key, SADD 使用隨機值。
-P :通過管道傳輸<numreq>請求。
-q :強制退出 redis。僅顯示 query/sec 值。
--csv :以 CSV 格式輸出。
-l :生成循環,永久執行測試。
-t :僅運行以逗號分隔的測試命令列表。
-I :Idle 模式。僅打開 N 個 idle 連接并等待。

#向 IP 地址為 192.168.80.10、端口為 6379 的 Redis 服務器發送 100 個并發連接與 100000 個請求測試性能
redis-benchmark -h 192.168.80.10 -p 6379 -c 100 -n 100000#測試存取大小為 100 字節的數據包的性能
redis-benchmark -h 192.168.80.10 -p 6379 -q -d 100#測試本機上 Redis 服務在進行 set 與 lpush 操作時的性能
redis-benchmark -t set,lpush -n 100000 -q

3.Redis 數據庫常用命令

set:存放數據,命令格式為 set key value
get:獲取數據,命令格式為 get key

1)keys 命令可以取符合規則的鍵值列表,通常情況可以結合*、?等選項來使用。

127.0.0.1:6379> set k1 1
127.0.0.1:6379> set k2 2
127.0.0.1:6379> set k3 3
127.0.0.1:6379> set v1 4
127.0.0.1:6379> set v5 5
127.0.0.1:6379> set v22 5

127.0.0.1:6379> KEYS *? ? ? ? ? #查看當前數據庫中所有鍵

127.0.0.1:6379> KEYS v*? ? ? ? ?#查看當前數據庫中以 v 開頭的數據

127.0.0.1:6379> KEYS v?? ? ? ??#查看當前數據庫中以 v 開頭后面包含任意一位的數據

127.0.0.1:6379> KEYS v???? ???#查看當前數據庫中以 v 開頭 v 開頭后面包含任意兩位的數據

2)exists 命令可以判斷鍵值是否存在。

127.0.0.1:6379> exists teacher?? ??? ?#判斷 teacher 鍵是否存在
(integer) 1?? ??? ??? ??? ??? ??? ??? ?# 1 表示 teacher 鍵是存在
127.0.0.1:6379> exists tea
(integer) 0?? ??? ??? ??? ??? ??? ??? ?# 0 表示 tea 鍵不存在

3)del 命令可以刪除當前數據庫的指定 key。

127.0.0.1:6379> keys *
127.0.0.1:6379> del v5
127.0.0.1:6379> get v5

4)type 命令可以獲取 key 對應的 value 值類型。

127.0.0.1:6379> type k1
string

5)expire 命令可以為已存在的 key 設置過期時間

127.0.0.1:6379> expire k1 10?? ??? ?#設置 k1 鍵的過期時間為 10 秒

6)ttl 命令可以查看 key 還有多少秒過期,-1表示永不過期,-2表示已過期

127.0.0.1:6379> ttl k1

7)expire 命令創建 key 和 值,并設置過期時間

127.0.0.1:6379> setex k11 15 hello

8)rename 命令是對已有 key 進行重命名。(覆蓋)

命令格式:rename 源key 目標key

注意:使用rename命令進行重命名時,無論目標key是否存在都進行重命名,且源key的值會覆蓋目標key的值。在實際使用過程中,建議先用 exists 命令查看目標 key 是否存在,然后再決定是否執行 rename 命令,以避免覆蓋重要數據。

127.0.0.1:6379> keys v*
1) "v1"
2) "v22"
127.0.0.1:6379> rename v22 v2
OK
127.0.0.1:6379> keys v*
1) "v1"
2) "v2"
127.0.0.1:6379> get v1
"4"
127.0.0.1:6379> get v2
"5"
127.0.0.1:6379> rename v1 v2
OK
127.0.0.1:6379> get v1
(nil)
127.0.0.1:6379> get v2
"4"

9)renamenx 命令的作用是對已有 key 進行重命名,并檢測新名是否存在,如果目標 key 存在則不進行重命名。(不覆蓋)

命令格式:renamenx 源key 目標key

127.0.0.1:6379> keys *
127.0.0.1:6379> get teacher
"zhangsan"
127.0.0.1:6379> get v2
"4"
127.0.0.1:6379> renamenx v2 teacher
(integer) 0
127.0.0.1:6379> keys *
127.0.0.1:6379> get teacher
"zhangsan"
127.0.0.1:6379> get v2
"4"

10)dbsize 命令的作用是查看當前數據庫中 key 的數目。

127.0.0.1:6379> dbsize


11)使用config set requirepass yourpassword命令設置密碼

127.0.0.1:6379> config set requirepass 123456

12)使用config get requirepass命令查看密碼(一旦設置密碼,必須先驗證通過密碼,否則所有操作不可用)

127.0.0.1:6379> auth 123456
127.0.0.1:6379> config get requirepass

4.Redis 多數據庫常用命令

Redis 支持多數據庫,Redis 默認情況下包含 16 個數據庫,數據庫名稱是用數字 0-15 來依次命名的。
多數據庫相互獨立,互不干擾。

1)多數據庫間切換

命令格式:select 序號

注意:使用 redis-cli 連接 Redis 數據庫后,默認使用的是序號為 0 的數據庫。

127.0.0.1:6379> select 10?? ??? ??? ?#切換至序號為 10 的數據庫

127.0.0.1:6379[10]> select 15?? ??? ?#切換至序號為 15 的數據庫

127.0.0.1:6379[15]> select 0?? ??? ??? ?#切換至序號為 0 的數據庫

2)多數據庫間移動數據

格式:move 鍵名 序號

127.0.0.1:6379> set k1 100
OK
127.0.0.1:6379> get k1
"100"
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> get k1
(nil)
127.0.0.1:6379[1]> select 0?? ??? ??? ?#切換至目標數據庫 0
OK
127.0.0.1:6379> get k1?? ??? ??? ??? ?#查看目標數據是否存在
"100"
127.0.0.1:6379> move k1 1?? ??? ??? ?#將數據庫 0 中 k1 移動到數據庫 1 中
(integer) 1
127.0.0.1:6379> select 1?? ??? ??? ??? ?#切換至目標數據庫 1
OK
127.0.0.1:6379[1]> get k1?? ??? ??? ?#查看被移動數據
"100"
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> get k1?? ??? ??? ??? ?#在數據庫 0 中無法查看到 k1 的值
(nil)

3)清除數據庫內數據

FLUSHDB :清空當前數據庫數據
FLUSHALL :清空所有數據庫的數據,慎用!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/36772.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/36772.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/36772.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

BUG:AttributeError: module ‘websocket‘ has no attribute ‘enableTrace’

AttributeError: module ‘websocket’ has no attribute enableTrace’ 環境 windows 11 Python 3.10websocket 0.2.1 websocket-client 1.8.0 websockets 11.0.3 rel 0.4.9.19詳情 一開始…

ActiveMQ camel

游覽器輸入地址: http://127.0.0.1:8161/admin/ 訪問activemq管理臺 賬號和密碼默認為: admin/admin# yml配置的密碼也是如下的密碼 activemq:url: failover:(tcp://localhost:61616)username: adminpassword: adminComponent public class ActiveMqReceiveRouter extends Rout…

AudioLM音頻生成模型

GPT-4o (OpenAI) AudioLM&#xff08;Audio Language Model&#xff09;是一種生成音頻的深度學習模型。它可以通過學習語言模型的結構來生成連貫和高質量的音頻信號。這類模型通常應用于語音合成、音樂生成和音頻內容生成等領域。以下是一些與AudioLM相關的核心概念和技術細…

【JavaEE進階】Spring AOP使用篇

目錄 1.AOP概述 2.SpringAOP快速入門 2.1 引入AOP依賴 2.2 編寫AOP程序 3. Spring AOP詳解 3.1 Spring AOP 核心概念 3.1.1切點(Pointcut) 3.1.2 連接點 (Join Point) 3.1.3 通知(Advice) 3.1.4 切面(Aspect) 3.2 通知類型 3.3PointCut 3.4 切面優先級 3.5 切點表…

基于經典滑膜控制的永磁同步電機調速系統MATLAB仿真

滑膜控制器 取PMSM狀態變量為&#xff1a; ωref為目標轉速&#xff0c;ωm為電機輸出轉速。將此式求導得&#xff1a; 定義系統滑模面函數為&#xff1a; 對滑模面函數求導 在電機實際控制時&#xff0c;滑模控制方法存在高頻抖振問題&#xff0c;則需要選取合適的指數趨近率…

web前端——css(一篇教會網頁制作)

目錄 一、基本語法 1.行內樣式表 2.內嵌樣式表 3.外部樣式表 二、選擇器 1.標簽選擇器 2.類選擇器 3.id 選擇器 4.通配選擇器 三、常見修飾 1.文本 2.背景 3.列表 4.偽類 5.透明度 6.塊級、行級、行級塊標簽 7.div 和 span 四、盒子模型&#xff08;重點&…

【PostgreSQL】守護數據安全:事務與數據完整性管理

目錄 事務管理&#xff1a;確保操作的原子性 事務的概念與重要性 事務的啟動與提交 事務的回滾&#xff08;ROLLBACK&#xff09;&#xff08; 數據一致性與隔離級別 隔離級別的解釋 設置隔離級別 錯誤處理與事務的高級策略 異常處理&#xff08;SAVEPOINT & EXCE…

25屆最近5年重慶郵電大學自動化考研院校分析

重慶郵電大學 目錄 一、學校學院專業簡介 二、考試科目指定教材 三、近5年考研分數情況 四、近5年招生錄取情況 五、最新一年分數段圖表 六、歷年真題PDF 七、初試大綱復試大綱 八、學費&獎學金&就業方向 一、學校學院專業簡介 二、考試科目指定教材 1、考試…

[數據集][目標檢測]電纜鋼絲繩線纜缺陷檢測數據集VOC+YOLO格式1800張3類別

數據集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路徑的txt文件&#xff0c;僅僅包含jpg圖片以及對應的VOC格式xml文件和yolo格式txt文件) 圖片數量(jpg文件個數)&#xff1a;1800 標注數量(xml文件個數)&#xff1a;1800 標注數量(txt文件個數)&#xff1a;1800 標注…

單例模式(下)

文章目錄 文章介紹步驟安排及單例講解step1&#xff1a;注冊單例類型&#xff08;main.cpp&#xff09;step2&#xff1a;定義類和私有構造函數&#xff08;keyboardinputmanager.h&#xff09;step3:&#xff08;keyboardinputmanager.cpp&#xff09;step4&#xff1a;在qml中…

雷卯一站式解決電子設備靜電浪涌與接口安全

在快速演進的數字時代&#xff0c;電子設備不僅是日常生活的核心&#xff0c;更是工業自動化、智能穿戴、智能家居乃至未來交通的基石。然而&#xff0c;隨著技術邊界的不斷拓展&#xff0c;設備面臨的挑戰也日益嚴峻&#xff0c;尤其是來自靜電放電(ESD)、浪涌沖擊及電磁干擾的…

【2024最新華為OD-C/D卷試題匯總】[支持在線評測] 特殊加密算法(200分) - 三語言AC題解(Python/Java/Cpp)

&#x1f36d; 大家好這里是清隆學長 &#xff0c;一枚熱愛算法的程序員 ? 本系列打算持續跟新華為OD-C/D卷的三語言AC題解 &#x1f4bb; ACM銀牌&#x1f948;| 多次AK大廠筆試 &#xff5c; 編程一對一輔導 &#x1f44f; 感謝大家的訂閱? 和 喜歡&#x1f497; &#x1f…

Rust 跨平臺-Android 和鴻蒙 OS

1. 安裝 rustup rustup 是 Rust 的安裝和版本管理工具 $ curl --proto https --tlsv1.2 https://sh.rustup.rs -sSf | sh 該命令會安裝 rusup 和最新的穩定版本的 Rust&#xff1b;包括&#xff1a; rustc Rust 編譯器&#xff0c;用于將 Rust 代碼編譯成可執行文件或庫。 ca…

技術速遞|Visual Studio Code 的 .NET MAUI 擴展現已正式發布

作者&#xff1a;Maddy Montaquila 排版&#xff1a;Alan Wang 今天&#xff0c;我們非常高興地宣布 .NET MAUI VS Code 擴展插件結束了預覽階段&#xff0c;并將包含一些期待已久的新功能 - 包括 XAML IntelliSense 和 Hot Reload&#xff01; 什么是 .NET MAUI 擴展插件&…

GuLi商城-商品服務-API-三級分類-刪除-頁面效果

一步步學習Vue太慢了&#xff0c;準備跳過前端的學習&#xff0c;直接使用前端完整的項目 下載依賴npm install&#xff0c;會報錯&#xff0c;排查了好久 我安裝的是Node14&#xff0c;所以必須要安裝4.14 Vscode終端輸入&#xff1a;npm install node-sass4.14 輸入&#x…

【Android面試八股文】如果需要在Activity間傳遞大量的數據怎么辦?

文章目錄 1. 使用Intent傳遞數據2. 使用靜態變量3. 使用Parcelable或Serializable接口4. 使用文件5. 使用數據庫存儲6. 使用ContentProvider7. 匿名共享內存(Ashmem)總結在Android開發中,如果需要在Activity之間傳遞大量數據,可以采取以下幾種方法: 1. 使用Intent傳遞數據…

【博士每天一篇文獻-綜述】A survey on few-shot class-incremental learning

閱讀時間&#xff1a;2023-12-19 1 介紹 年份&#xff1a;2024 作者&#xff1a;田松松&#xff0c;中國科學院半導體研究所&#xff1b;李璐思&#xff0c;老道明大學助理教授&#xff1b;李偉軍&#xff0c;中國科學院半導體研究所AnnLab&#xff1b; 期刊&#xff1a; Neu…

LearnOpenGL - Android OpenGL ES 3.0 使用 FBO 進行離屏渲染

系列文章目錄 LearnOpenGL 筆記 - 入門 01 OpenGLLearnOpenGL 筆記 - 入門 02 創建窗口LearnOpenGL 筆記 - 入門 03 你好&#xff0c;窗口LearnOpenGL 筆記 - 入門 04 你好&#xff0c;三角形OpenGL - 如何理解 VAO 與 VBO 之間的關系LearnOpenGL - Android OpenGL ES 3.0 繪制…

《Windows API每日一練》6.4 程序測試

前面我們討論了鼠標的一些基礎知識&#xff0c;本節我們將通過一些實例來講解鼠標消息的不同處理方式。 本節必須掌握的知識點&#xff1a; 第36練&#xff1a;鼠標擊中測試1 第37練&#xff1a;鼠標擊中測試2—增加鍵盤接口 第38練&#xff1a;鼠標擊中測試3—子窗口 第39練&…

3.imput 字符串常用方法 字符串倒序,切片

1.input input()函數接收一個標準輸入數據返回string類型 2.字符串常用方法 upper()將字符串中的小寫字母變為大寫 lower()大寫變小寫 len()獲取長度 count(子字符串)統計某個字符出現的次數 index(子字符串)可以返回子字符串出現的位置, rindex從右邊找 find(子字符串)可以返回…