黑馬點評DAY2|Redis基本操作

Redis客戶端

命令行客戶端

進入到redis的安裝目錄,可以看到redis-cli文件,這就是redis的命令行客戶端,在安裝redis時自帶的。
在這里插入圖片描述
使用方式如下

redis-cli [options] [commonds]

其中常見的options有:

  • -h 127.0.0.1 :指定要連接的redis節點的IP地址,默認為127.0.0.1(本機IP地址)
  • -p 6379 :指定要連接的redis節點的端口,默認是6379
  • -a 123321 : 指定redis的訪問密碼

其中commonds就是redis的操作命令,如:

  • ping:與redis做心跳測試,服務端正常就會返回 pong

但是一般情況下,commonds我們不需要輸入,這時會進入一個持續的交互的控制臺,可以不斷地輸入命令返回命令。

我們首先先進入到本機的6379端口,再去ping,但是發現沒有權限,說明需要密碼。

在這里插入圖片描述
注意,這里crtl + c 先退出端口,再去用命令行輸入密碼,這個時候再去ping,收到pong。證明已經正常連接redis。
在這里插入圖片描述
當然也可以先進入端口,再用AUTH+密碼去輸入密碼
在這里插入圖片描述
這時候也可以對redis進行操作,向里面存入鍵值對

127.0.0.1:6379> set name jack
OK
127.0.0.1:6379> set age 21
OK

取鍵值對

127.0.0.1:6379> get name
"jack"
127.0.0.1:6379> get age
"21"

圖形化桌面客戶端

可以在鏈接: https://github.com/lework/RedisDesktopManager-Windows/releases下載resp2022圖形化桌面客戶端。
第一次啟動點集鏈接“redis”,再點連接設置,填寫名字、地址、密碼,測試連接,連接成功
在這里插入圖片描述
連接成功發現redis中有16個數據庫,在db0里面有我們剛存的兩個鍵值對
![在這里插入圖片描述](https://img-blog.csdnimg.cn/direct/e3835a6399b94efb91a235bff8a001e8.png
當然我們也可以選擇其他的db,這里選擇一號db,添加name:rose
在這里插入圖片描述
再去命令行客戶端選中db1,再get name得到rose

127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> get name
"rose"

Redis常見命令

Redis數據結構介紹

  • Redis是一種鍵值型數據庫,鍵為String類型,值可以為很多類型:
    • String : helloworld
    • Hash :{name:“zonda”,age:25}
    • List :[A -> B -> C -> C]
    • Set :{A,B,C}
    • SortedSet : {A:1,B:2,C:3}
      以上五種為基本數據類型
    • GEO :{A:(120.3,30.5)}
    • BitMap : 0110110101001011101110
    • HyperLog : 0110110101001011101110
      以上三種為特殊數據類型

Redis命令行查看

查看命令行的兩種方式(建議在學習的過程中邊學邊查邊記):

  • 我們可以在redis的官方文檔中查找到redis的所有命令行
    redis的官方文檔
  • 當然我們也可以在命令行客戶端中查找,輸入help + @組名稱就可以查到這個組的所有命令行,比如
127.0.0.1:6379> help @StringAPPEND key valuesummary: Append a value to a keysince: 2.0.0BITCOUNT key [start end]summary: Count set bits in a stringsince: 2.6.0BITFIELD key [GET type offset] [SET type offset value] [INCRBY type offset increment] [OVERFLOW WRAP|SAT|FAIL]summary: Perform arbitrary bitfield integer operations on stringssince: 3.2.0
...

通用命令

通用命令是對任何數據類型都適用的,常用的有:

  • keys:查看符合模版的所有key
    在命令行客戶端輸入help keys,根據解釋可知keys可以找出對應模版的keys,這里的pattern是通配符:
127.0.0.1:6379> help keysKEYS patternsummary: Find all keys matching the given patternsince: 1.0.0group: generic

使用如下:

127.0.0.1:6379> keys *
1) "age"
2) "name"
127.0.0.1:6379> KEYS name
1) "name"
127.0.0.1:6379> keys a*
1) "age"

這種查詢的方式底層還是用模糊查詢進行查找的,效率并不高,當redis數據量達到一定規模比如數百萬之后,這樣的搜索會給服務器帶來巨大負擔,且redis的數據交互是單線程的,在查詢數據的時候無法執行其他命令,redis的服務就會被阻塞,所以生產環境不建議使用keys查詢數據。不建議再生產環境使用。

  • del:刪除一個指定的key
    DEL key [key …]
    只要
127.0.0.1:6379> help delDEL key [key ...]summary: Delete a keysince: 1.0.0group: generic

批量存入三組鍵值對,然后再刪除。會返回(integer) 2,即被刪除的鍵值對的個數。

127.0.0.1:6379> MSET k1 v1 k2 v2 k3 v3
OK
127.0.0.1:6379> keys *
1) "k1"
2) "k2"
3) "age"
4) "k3"
127.0.0.1:6379> del k1 k2
(integer) 2
127.0.0.1:6379> keys *
1) "age"
2) "k3"
  • exists:判斷一個鍵是否存在
127.0.0.1:6379> help existsEXISTS key [key ...]summary: Determine if a key existssince: 1.0.0group: generic

返回的也是存在的個數

127.0.0.1:6379> MSET name zonda
OK
127.0.0.1:6379> exists name age
(integer) 2
127.0.0.1:6379> exists name
(integer) 1
  • expire:給一個key設置有效期,有效期到期時該key會被自動刪除。因為Redis是基于內存的數據庫,如果每一條數據都不設置存在時間,時間久了會內存不足。比如短信驗證碼的有效期,可以設置存在時間,到時間就自動刪除。大大節省了redis的內存空間。
127.0.0.1:6379> help expireEXPIRE key secondssummary: Set a key's time to live in secondssince: 1.0.0group: generic
  • ttl:查看一個key的剩余有效時間,和expire配合著使用。
127.0.0.1:6379> help ttlTTL keysummary: Get the time to live for a keysince: 1.0.0group: generic

這里注意:當一個鍵到期了,查詢該鍵會返回-2;而并沒有設置有效時長的鍵的有效時長為-1,表示永久有效。所以一般建議在給redis存入數據的時候都設置一個有效期。

127.0.0.1:6379> keys *
1) "age"
2) "name"
127.0.0.1:6379> expire age 20
(integer) 1
127.0.0.1:6379> ttl age
(integer) 14
127.0.0.1:6379> ttl age
(integer) 10
127.0.0.1:6379> ttl age
(integer) -2
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> ttl age
(integer) -2
127.0.0.1:6379> ttl name
(integer) -1

String類型

String類型,也就是字符串類型,是Redis中最簡單的存儲類型。
Redis中的字符串類型分為三種,這三種字符串底層編碼不一樣,占用的內存空間也不一樣,但本質都是字符數組,最大占用內存空間為512m。三種分別為:

  • string:普通字符串
  • int:整數類型,可以自增、自減操作
  • float:浮點類型,可以自增、自減操作

String的常見命令:

  • set:添加或者修改一個鍵值對
  • get:根據key獲取String類型的value
  • mset:批量添加多個String類型的鍵值對
127.0.0.1:6379> help msetMSET key value [key value ...]summary: Set multiple keys to multiple valuessince: 1.0.1group: string
  • mget:批量獲取多個string類型的value
127.0.0.1:6379> help mgetMGET key [key ...]summary: Get the values of all the given keyssince: 1.0.0group: string
  • incr:讓一個整型的key自增1
127.0.0.1:6379> help incrINCR keysummary: Increment the integer value of a key by onesince: 1.0.0group: string
  • incrby:可以給value自增并指定步長,當然也可以將步長改為負數自減。
127.0.0.1:6379> help incrbyINCRBY key incrementsummary: Increment the integer value of a key by the given amountsince: 1.0.0group: string
  • incrbyfloat:對于浮點數的自增以及指定步長
127.0.0.1:6379> help incrbyfloatINCRBYFLOAT key incrementsummary: Increment the float value of a key by the given amountsince: 2.6.0group: string
  • setnx:添加一個String類型的鍵值對,前提是這個鍵值對不存在,否則不執行。而set會把已經存在的鍵的值給覆蓋掉。
127.0.0.1:6379> help setnxSETNX key valuesummary: Set the value of a key, only if the key does not existsince: 1.0.0group: string
  • setex:設置String類型的鍵值對,并制定有效期
127.0.0.1:6379> help setexSETEX key seconds valuesummary: Set the value and expiration of a keysince: 2.0.0group: string

Key的層級格式

redis中沒有表的概念,我們該如何區分不同類型的key呢?
就比如一個用戶的id為1,恰好有一個商品的id也為1.該如何區分呢?
解決辦法:可以用多個單詞形成層級結構,多個單詞之間用‘ : ’隔開,比如:
項目名:業務名:類型:id
那么區分用戶和商品id,就可以用:

  • user的id:heima:user:1
  • product的id: heima:product:1

但是這樣解決了key的問題,但是像user、product這種鍵對應的值在java中都是對象,我們該如何存儲到值的位置呢?
解決辦法在redis中,string的值就是字符串,java對象雖然不是字符串,但是可以序列化為JSON的風格來存儲。比如一下這種形式:
在這里插入圖片描述
我們向redis中存入四個兼職對

127.0.0.1:6379> set heima:user:1 {"id":1, "name":"Jack", "age": 21}
Invalid argument(s)
127.0.0.1:6379> set heima:user:1 '{"id":1, "name":"Jack", "age": 21}'
OK
127.0.0.1:6379> set heima:user:2 '{"id":2, "name":"Rose", "age": 18}'
OK
127.0.0.1:6379> set heima:product:1 '{"id":1, "name":"小米11", "price": 4999}'
OK
127.0.0.1:6379> set heima:product:2 '{"id":2, "name":"榮耀6", "price": 2999}'
OK

在圖形客戶端中可以看出多出了一個heima文件夾,里面存儲了數據的層級結構,將數據自然地分離。
在這里插入圖片描述

Hash類型

Hash類型也叫散列,其value是一個無序字典,類似于Java中的HashMap結構。相比于String類型存儲的JSON化的value,當需要修改某個字段的時候很不方便:
在這里插入圖片描述
而Hash結構的value又是一個表,表里為field-value的鍵值對,可以針對單個字段CRUD,所以相比之下,Hash結構更加靈活:
在這里插入圖片描述
Hash的常見命令:
基本上都是在String命令的前面加上H

  • hset:添加或修改hash類型key的field的值
127.0.0.1:6379> help hsetHSET key field value [field value ...]summary: Set the string value of a hash fieldsince: 2.0.0group: hash
  • hget:獲取一個hash類型key的field的值
192.168.101.65:6379> help hgetHGET key fieldsummary: Get the value of a hash fieldsince: 2.0.0group: hash
  • hmset:批量新增多個hash類型的key的field的值
192.168.101.65:6379> help hmsetHMSET key field value [field value ...]summary: Set multiple hash fields to multiple valuessince: 2.0.0group: hash
  • hmget:批量獲取多個hash類型的key的field的值
192.168.101.65:6379> help hmgetHMGET key field [field ...]summary: Get the values of all the given hash fieldssince: 2.0.0group: hash
  • hgetall:獲取一個hash類型的key中的所有的field和value(可以理解為hashmap中的entryset)
192.168.101.65:6379> help hgetallHGETALL keysummary: Get all the fields and values in a hashsince: 2.0.0group: hash
  • hkeys:獲取yigehash類型的key中的所有field
  • hvals:獲取yigehash類型的key中的所有value
    上面這倆可以理解成java中hashmap中的keys()和values()方法
  • hincrby:讓一個hash類型key的字段值自增長并指定步長
192.168.101.65:6379> help hincrbyHINCRBY key field incrementsummary: Increment the integer value of a hash field by the given numbersince: 2.0.0group: hash
  • hsetnx:添加一個hash類型的key的field值,前提是這個field不存在,否則不執行。
192.168.101.65:6379> help hsetnxHSETNX key field valuesummary: Set the value of a hash field, only if the field does not existsince: 2.0.0group: hash

List類型

Redis的List類型與Java中的LInkedList類似,可以看做是一個雙向鏈表,既可以支持正向檢索,也可以支持反向檢索。這種數據結構常用來保存對順序有一定需求的場景,比如朋友圈點贊,評論都是有序的
溫習一下LinkedList的幾大特征:

  • 有序
  • 插入和刪除速度快
  • 可以重復
  • 支持正向和反向檢索,但查詢速度一般

List的常見命令:

  • lpush:向列表左側插入一個或者多個元素
192.168.101.65:6379> help lpushLPUSH key element [element ...]summary: Prepend one or multiple elements to a listsince: 1.0.0group: list
  • lpop:移除并返回左側第一個和元素,沒有則返回nil
192.168.101.65:6379> help lpopLPOP key [count]summary: Remove and get the first elements in a listsince: 1.0.0group: list
  • rpush:向列表右側插入一個或者多個元素
192.168.101.65:6379> help rpushRPUSH key element [element ...]summary: Append one or multiple elements to a listsince: 1.0.0group: list
  • rpop:移除并返回列表右側的第一個元素
192.168.101.65:6379> help rpopRPOP key [count]summary: Remove and get the last elements in a listsince: 1.0.0group: list
  • lrange:返回一段角標范圍內的所有元素,不會刪除元素,知識查詢
192.168.101.65:6379> help lrangeLRANGE key start stopsummary: Get a range of elements from a listsince: 1.0.0group: list

如下圖所示:lrange key 1 2
在這里插入圖片描述

  • blpop和brpop:與lpop和rpop相比,在沒有元素的時候不會立即返回nil,而是等待指定時間(類似于阻塞隊列),如果還是沒有元素再返回nil。
192.168.101.65:6379> help blpopBLPOP key [key ...] timeoutsummary: Remove and get the first element in a list, or block until one is availablesince: 2.0.0group: list

Set類型

Redis的Set結構類似于Java中的HashSet,可以看做是一個value為null的HashMap。因為也是一個Hash表,因此具備與HashSet類似的特征:

  • 無序
  • 元素不可重復
  • 查找快
  • 支持交集、并集、差集等功能(所以適用于交友型的應用)

Set的常見命令:
下面的這幾個是單集合的操作

  • SADD:向set元素中添加一個或者多個元素(可一次插入一個或者多個)
    192.168.101.65:6379> help saddSADD key member [member ...]
    summary: Add one or more members to a set
    since: 1.0.0
    group: set
  • SREM:移除set中的指定元素(可一次移除一個或者多個)
192.168.101.65:6379> help saddSADD key member [member ...]summary: Add one or more members to a setsince: 1.0.0group: set
  • scard:返回set集合中元素的個數
192.168.101.65:6379> help scardSCARD keysummary: Get the number of members in a setsince: 1.0.0group: set
  • SISMEMBER:判斷一個元素是否存在于set集合中
192.168.101.65:6379> help sismemberSISMEMBER key membersummary: Determine if a given value is a member of a setsince: 1.0.0group: set
  • SMEMBERS:獲取set中的所有元素
 192.168.101.65:6379> help smembersSMEMBERS keysummary: Get all the members in a setsince: 1.0.0group: set

下面的這幾個是多集合的操作

  • SINTER:求key1和key2的交集
192.168.101.65:6379> help sinterSINTER key [key ...]summary: Intersect multiple setssince: 1.0.0group: set
  • SDIFF:求key1和key2的差集
192.168.101.65:6379> help sdiffSDIFF key [key ...]summary: Subtract multiple setssince: 1.0.0group: set
  • SUNION:求key1和key2的并集
192.168.101.65:6379> help sunionSUNION key [key ...]summary: Add multiple setssince: 1.0.0group: set

SortedSet類型

Redis是一個可排序的Set集合,與Java的TreeSet在功能上相似,但是底層結構相差很大,因為TreeSet底層是通過紅黑樹來實現的。SortedSet中的每一個元素都帶一個score屬性,可以基于score屬性對元素排序,底層的實現是一個跳表加Hash表。因為具有排序的功能,因此常用于實現排行榜這類功能
因此SortedSet具備的底層的特性有:

  • 可排序(跳表)
  • 元素不重復(為Set)
  • 查詢速度快(因為有Hash表)
    SortedSet的常見命令:
  • zadd:添加一個或多個元素到SortedSet,如果已經存在則更新其score值
192.168.101.65:6379> help zaddZADD key [NX|XX] [GT|LT] [CH] [INCR] score member [score member ...]summary: Add one or more members to a sorte its score if it already existssince: 1.2.0group: sorted_set
  • zrem:刪除sortedset中的一個或多個元素。
192.168.101.65:6379> help zremZREM key member [member ...]summary: Remove one or more members from a sorted setsince: 1.2.0group: sorted_set
  • zscore:獲取sortedset中指定元素的score值
192.168.101.65:6379> help zscoreZSCORE key membersummary: Get the score associated with the given member in a sorted setsince: 1.2.0group: sorted_set
  • zrank:獲取sortedset中指定元素的排名
192.168.101.65:6379> help zrankZRANK key membersummary: Determine the index of a member in a sorted setsince: 2.0.0group: sorted_set
  • zcard:獲取sortedset中的元素的個數
192.168.101.65:6379> help zcardZCARD keysummary: Get the number of members in a sorted setsince: 1.2.0group: sorted_set
  • zcount:統計score值在給定范圍內的所有元素的個數
192.168.101.65:6379> help zcountZCOUNT key min maxsummary: Count the members in a sorted set with scores within the given valuessince: 2.0.0group: sorted_set
  • zincrby:讓SortedSet中的指定元素的值自增,步長為指定的increment的值。
192.168.101.65:6379> help zincrbyZINCRBY key increment membersummary: Increment the score of a member in a sorted setsince: 1.2.0group: sorted_set
  • zrange:按照score排序后,獲取指定排名范圍內的元素。
192.168.101.65:6379> help zrangeZRANGE key min max [BYSCORE|BYLEX] [REV] [LIMIT offset count] [WITHSCORES]summary: Return a range of members in a sorted setsince: 1.2.0group: sorted_set
  • zrangebyscore:按照score排序之后,按照指定score范圍內的元素。
192.168.101.65:6379> help zrangebyscoreZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]summary: Return a range of members in a sorted set, by scoresince: 1.0.5group: sorted_set
  • zdiff、zinter、zunion:求交集、并集、差集

注意:以上的排序默認都是升序排序,如果需要降序則在命令的z后面加rev即可。

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

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

相關文章

電量監測與電量計基礎知識

硬件之路學習筆記 ?-----前文導讀----- ①、公眾號主頁點擊發消息 ②、點擊下方菜單獲取系列文章 -----本文簡介----- 主要內容包括: ①:簡介 ②:省成本方式-電阻分壓 ③:精確方式-電量計與阻抗跟蹤技術 ----- 正文 ----…

Hugging face Transformers(1)—— 基礎知識

Hugging Face 是一家在 NLP 和 AI 領域具有重要影響力的科技公司,他們的開源工具和社區建設為NLP研究和開發提供了強大的支持。它們擁有當前最活躍、最受關注、影響力最大的 NLP 社區,最新最強的 NLP 模型大多在這里發布和開源。該社區也提供了豐富的教程…

JavaWeb--jquery篇

概述 jQuery是一個快速、簡潔的JavaScript框架,是一個優秀的JavaScript代碼庫(框架)于2006年1月由John Resig發布。它封裝JavaScript常用的功能代碼,提供一種簡便的JavaScript設計模式,優化HTML文檔操作、事件處理、動…

2229:Sumsets

網址如下&#xff1a; OpenJudge - 2229:Sumsets 這題不是我想出來的 在這里僅做記錄 代碼如下&#xff1a; #include<iostream> using namespace std;const int N 1000000000; int dp[1000010]; int n;int main() {cin >> n;dp[0] 1;dp[1] 1;for (int i 2…

前端面試題7(單點登錄)

如何實現單點登錄 單點登錄&#xff08;Single Sign-On&#xff0c;簡稱SSO&#xff09;是一種允許用戶在多個應用系統中只需登錄一次&#xff0c;就可以訪問所有相互信任的應用系統的認證技術。實現前端單點登錄主要依賴于后端的支持和一些特定的協議&#xff0c;如OAuth、Ope…

無法下載cuda

cuda下載不了 一、臺式機電腦瀏覽器打不開cuda下載下面二、解決辦法 一、臺式機電腦瀏覽器打不開cuda下載下面 用360、chrome、Edge瀏覽器都打不開下載頁面&#xff0c;有的人說后綴com改成cn&#xff0c;都不行。知乎上說是網絡問題&#xff0c;電信換成換成移動/聯通的網絡會…

Selenium 切換 frame/iframe

環境&#xff1a; Python 3.8 selenium3.141.0 urllib31.26.19說明&#xff1a; driver.switch_to.frame() # 將當前定位的主體切換為frame/iframe表單的內嵌頁面中 driver.switch_to.default_content() # 跳回最外層的頁面# 判斷元素是否在 frame/ifame 中 # 126 郵箱為例 # …

無人機云臺類型及作用

無人機云臺主要分為三種類型&#xff1a; 單軸云臺&#xff1a;僅支持單向旋轉&#xff0c;適合拍攝平滑的延時攝影和全景照片。 雙軸云臺&#xff1a;支持水平和垂直旋轉&#xff0c;可用于拍攝流暢的視頻和運動物體。 三軸云臺&#xff1a;全面支持所有旋轉軸&#xff0c;…

醫院陪診系統開發的關鍵技術與挑戰

隨著醫療服務需求的不斷提升&#xff0c;傳統的醫院服務模式面臨著巨大的壓力和挑戰。為了提升患者的就醫體驗和醫療服務的效率&#xff0c;醫院陪診系統應運而生。本文將探討醫院陪診系統開發的關鍵技術與挑戰&#xff0c;并結合具體的技術代碼進行分析。 一、醫院陪診系統的…

什么是可定制的鋰電池?它的應用范圍有哪些?

鋰電池在新能源汽車領域已經得到了廣泛的應用。然而&#xff0c;隨著科技的不斷進步和人們對于個性化需求的日益增長&#xff0c;可定制的鋰電池逐漸成為了市場的新寵。那么&#xff0c;究竟什么是可定制的鋰電池&#xff1f;它與普通鋰電池有何不同&#xff1f;它的應用范圍又…

android——設計模式(工廠模式)

一、工廠模式 Android 設計模式中的工廠模式是一種創建型設計模式&#xff0c;它提供了一種創建對象的最佳方式&#xff0c;而不必暴露其內部的創建邏輯。在Android中&#xff0c;工廠模式通常用于管理復雜組件實例化的過程&#xff0c;比如創建各種View、Activity、Fragment等…

Docker實戰教程(二)

文章目錄 基于Docker的微服務架構案例一、準備工作二、服務定義1. 用戶服務(User Service)2. 訂單服務(Order Service)3. 前端服務(Frontend Service)三、Docker Compose文件四、啟動微服務架構五、常見問題和解決方案六、總結基于Docker的微服務架構案例 在本案例中,我…

悠律凝聲環開放式耳機強者現身:集顏值和創新技術于一體的杰作

隨著技術的飛速發展&#xff0c;藍牙耳機已經成為人們生活中不可缺少的一環&#xff0c;外觀、音質以及實用性已經成為人們在購買時最主要的考慮因素。悠律凝聲環RingBuds Pro開放式藍牙耳機&#xff0c;憑借其特有的輕奢時尚外觀&#xff0c;斬獲2024年度MUSE繆斯創意獎金獎&a…

Android SeekBar設置指示器標簽,使用PopupWindow的方式

給Android 原生的SeekBar控件添加一個指示器標簽&#xff1b;記錄一下 按下時彈出popupwindow&#xff0c;進度條更新時刷新pw&#xff0c;松開時關閉pw&#xff1b; public class SeekBarPopUtils {private static PopupWindow popWin null;private static ConstraintLayou…

Kotlin協程使用詳解

協程是什么 協程是一種編程思想,并不局限于特定的語言。協程是輕量級的線程,基于線程池API,通俗的來說,就是官方提供的線程框架。協程的調度完全由用戶控制。協程擁有自己的寄存器上下文和棧。當我們在了解協程的時候,不可避免的會跟線程、進程作比較作分析,下面來貼個圖…

數據可視化之智慧城市的脈動與洞察

在數字化轉型的浪潮中,城市作為社會經濟發展的核心單元,正經歷著前所未有的變革。城市數據可視化大屏看板作為這一變革中的重要工具,不僅極大地提升了城市管理效率,還為公眾提供了直觀、全面的城市運行狀態視圖,成為智慧城市建設不可或缺的一部分。本文將深入探討以“城市…

ruoyi后臺修改

一、日志文件過大分包 \ruoyi-admin\src\main\resources\logback.xml <!-- 系統日志輸出 --> <appender name"file_info" class"ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/sys-info.log</file><!…

網安小貼士(9)網絡解密

一、前言 網絡解密技術的發展是一個不斷進化的過程&#xff0c;它與加密技術的進展緊密相連。 二、定義 網絡解密&#xff08;Network Decryption&#xff09;通常指的是在計算機網絡環境中&#xff0c;將加密的數據轉換回其原始可讀格式的過程。這個過程需要使用正確的密鑰…

0701_ARM5

練習&#xff1a;使用usart4 main.c #include "uart4.h"int main() {// 初始化 UART4hal_uart4_init();while (1) {// 發送一個字符串//hal_put_char( hal_get_char());hal_put_string(hal_get_string());}return 0; } usart4.c #include "uart4.h"//**…

ctfshow-web入門-文件包含(web88、web116、web117)

目錄 1、web88 2、web116 3、web117 1、web88 沒有過濾冒號 : &#xff0c;可以使用 data 協議&#xff0c;但是過濾了括號和等號&#xff0c;因此需要編碼繞過一下。 這里有點問題&#xff0c;我 (ls) 后加上分號發現不行&#xff0c;可能是編碼結果有加號&#xff0c;題目…