redis基本類型和使用

redis存儲數據的基本類型有:string(字符串類型)、hash(散列類型)、list(列表類型)、set(集合類型)、zset(有序集合類型)。

依次做一些練習。redis命令不區分大小寫。

key相關操作

127.0.0.1:6379> set key hello   ## 設置
OK
127.0.0.1:6379> set key1 world
OK
127.0.0.1:6379> keys ke*   ## keys查詢鍵名
1) "key1"
2) "key"
127.0.0.1:6379> del key1   ## 刪除鍵值對
(integer) 1
127.0.0.1:6379> exists key  ##查詢鍵名是否存在
(integer) 1    ##存在返回1
127.0.0.1:6379> exists key1
(integer) 0  ##不存在返回0
127.0.0.1:6379> type key  ##查詢鍵值的類型 
string

字符串類型

127.0.0.1:6379> exists num  
(integer) 0
127.0.0.1:6379> incr num  ##incr一個不存在的值,先創建新值,賦值為0,再自增1.院子操作。 對應的是decr
(integer) 1
127.0.0.1:6379> set key hello
OK
127.0.0.1:6379> incr key  ##無法對string自增
(error) ERR value is not an integer or out of range
127.0.0.1:6379> incrby num 3  ##increby增加指定的數值,對應的是decrby
(integer) 4
127.0.0.1:6379> incrbyfloat num 0.7  ##增加浮點數
"4.7"
127.0.0.1:6379> append key " world!"   ##append追加字符
(integer) 12
127.0.0.1:6379> get key
"hello world!"
127.0.0.1:6379> strlen key   ##strlen字符串長度
(integer) 12
127.0.0.1:6379> mget key num  ## mget批量獲取鍵值
1) "hello world!"
2) "4.7"
127.0.0.1:6379> mset key hi num 5.5   ##mset批量設置
OK
127.0.0.1:6379> mget key num
1) "hi"
2) "5.5"
127.0.0.1:6379> set foo bar  
OK
127.0.0.1:6379> getbit foo 1  ##getbit獲取某一位二進制數值
(integer) 1
127.0.0.1:6379> setbit foo 22 0   ##設置修改位值
(integer) 1
127.0.0.1:6379> get foo  ##修改成功
"bap"
127.0.0.1:6379> set foo bar
OK
127.0.0.1:6379> set foo1 aar
OK
127.0.0.1:6379> bitop or result foo foo1 ##bitop位操作
(integer) 3
127.0.0.1:6379> get result
"car"

GETBIT key offset
SETBIT key offset value
BITCOUNT key [start] [end] 獲取鍵值中值為1的二進制位個數,start和end表示字節位置
BITOP operation destkey key [key...] 對多個鍵值進行位運算,并將結果存儲在destkey對應的鍵值中。支持的操作:AND、 OR、 XOR、 NOT。
GETSET key newValue 原子操作,設置新值,返回原來的值。如果原值不存在,返回nil。
SETEX key seconds value 設置鍵值對的失效時間是seconds秒。
SETNX key value put if absent, or do nothing。
SETRANGE key offset value 從index等于offset位置起,替換length(value)個字符,替換為value。如果offset超出范圍,則中間補充0x00。
GETRANGE key start end 獲取指定返回的字符串,閉區間。end超過長度,則取到字符串末尾。
MGET key [key ... ]
MSET key value [key value ... ]
MSETNX key value [key value ... ] 原子操作。如果在這一批Keys中有任意一個Key已經存在了,那么該操作將全部回滾,即所有的修改都不會生效。1表示全部設置成功;0表示都沒有設置。

127.0.0.1:6379> getset foo hi  ##設置新值,返回舊值nil
(nil)
127.0.0.1:6379> get foo
"hi"
127.0.0.1:6379> setex foo 2 hello  ##設置鍵值對,2秒失效
OK
127.0.0.1:6379> get foo    ##沒失效時,返回值
"hello"
127.0.0.1:6379> get foo   ##失效之后,返回nil
(nil)
127.0.0.1:6379> set foo hello
OK
127.0.0.1:6379> setrange foo 1 appy  ##替換index=1之后的字符串
(integer) 5
127.0.0.1:6379> get foo
"happy"
127.0.0.1:6379> setrange foo 1 ee
(integer) 5   ##返回修改后的長度
127.0.0.1:6379> get foo   ##替換兩個字符
"heepy"
127.0.0.1:6379> setrange foo 8  day
(integer) 11     
127.0.0.1:6379> get foo
"heepy\x00\x00\x00day"
127.0.0.1:6379> get bar
(nil)
127.0.0.1:6379> setrange bar 2 ee ##bar的值為nil,補充兩個0x00
(integer) 4
127.0.0.1:6379> get bar
"\x00\x00ee"
127.0.0.1:6379> set key1 hello
OK
127.0.0.1:6379> msetnx key1 hi key2 hi  ##key2不存在,不修改
(integer) 0
127.0.0.1:6379> mget key1 key2  ## key2依然為nil
1) "hello"
2) (nil)

hash

HSET key field value
HGET key field
HMSET key field value [field value ... ]
HMGET key field [field ...]
HGETALL key
HEXISTS key field
HSETNX key field value 字段不存在時賦值。 與HSET類型,區別在于,如果字段存在,HSETNX不執行任何操作。
HINCRBY key filed increment 如果key、field不存在,自動創建,鍵值為0,再增值。
HDEL key field [field...] 這是刪除的是key:field,不能直接刪除key。如果要刪除key,使用DEL命令。
HEYS key 只獲取字段名
HVALS key 只獲取字段值
HLEN key 獲得字段數量

127.0.0.1:6379> HMSET g1class1 xiaoming 001 xiaohong 002 tom 003 hanmeimei 004
OK
127.0.0.1:6379> HGETALL g1class1 
1) "xiaoming"
2) "001"
3) "xiaohong"
4) "002"
5) "tom"
6) "003"
7) "hanmeimei"
8) "004"
127.0.0.1:6379> HKEYS g1class1
1) "xiaoming"
2) "xiaohong"
3) "tom"
4) "hanmeimei"
127.0.0.1:6379> HLEN g1class1
(integer) 4
127.0.0.1:6379> HGET g1class1 xiaohong
"002"
127.0.0.1:6379> HSET g1class1 lilei 005  ##het新值時,返回1
(integer) 1
127.0.0.1:6379> hset g1class1 xiaohong 007  ## hset更新值時,返回0
(integer) 0
127.0.0.1:6379> hsetnx g1class1 tom 008 ##已存在的值,不操作
(integer) 0
127.0.0.1:6379> hget g1class1 tom  ##已存在的值,更新不生效,還是003
"003"
127.0.0.1:6379> hdel g1class1   ##不能直接刪除key
(error) ERR wrong number of arguments for 'hdel' command
127.0.0.1:6379> DEL g1class1  ##使用DEL刪除key
(integer) 1
127.0.0.1:6379> hgetall g1class1  ##查詢為空
(empty list or set)

用途

  • 用來存儲分級數據。外部key作為prefix,是第一級key,hash中的key作為第二級key使用。
  • 存儲含有多個屬性的對象,如一篇博客的各種屬性:標題,標簽,分類等。修改某個屬性,不用操作整個博客內容。

list

redis列表類型內部是使用雙向列表實現的,所以可以向/從兩端添加/刪除元素。
LPUSH key value [value ...] 從左側添加元素,如果key不存在,初始化一個空列表,再添加。返回插入后,鏈表的個數。
LPUSHX key value 僅當指定的Key存在時,才在列表的左邊插入Value,否則將不會有任何操作發生。返回插入后,鏈表的個數。
RPUSH key value [value ...] 從右側添加元素
RPUSHX key value 僅當指定的Key存在時,才在列表的右邊插入Value,否則將不會有任何操作發生。返回插入后,鏈表的個數。
LPOP key 從兩端彈出元素
RPOP key
LLEN key 獲取列表中元素個數
LRANGE key start end 獲取列表片段,左邊在前,右邊在后。起始索引為0,最右邊元素索引可以為-1,右邊第二個索引可以為-2,以此類推。。。索引從左到右,如果start比end靠右,則返回空列表。end值可以大于長度范圍。
LREM key count value 從左邊(count > 0)開始,刪除前count個值為value的元素;從右邊(count < 0)開始,刪除前|count|個值為value的元素 ; 刪除所有值為value的元素(count = 0)。返回實際刪除元素的個數。
LINDEX key index 獲取指定索引的元素值
LSET key index value 設置指定索引的元素值
LTRIM key start end 刪除指定索引范圍之外的所有元素。start和end的規則與lrange的相同。
LINSERT key BEFORE|AFTER pivot value 從左到右查找pivot,將value插在其前面(BEFORE)或者后面(AFTER)。 返回插入后,元素總個數。
RPOPLPUSH source destination 刪除source最右邊的元素,插入到destination最左邊。返回操作的元素。

127.0.0.1:6379> lpush num 1 2  ## 先push 1,再push 2
(integer) 2
127.0.0.1:6379> rpush num 3 4 ##先push 3,再push 4
(integer) 4
127.0.0.1:6379> lrange num 0 -1 ##從0開始,顯示4個元素
1) "2"
2) "1"
3) "3"
4) "4"
127.0.0.1:6379> llen num
(integer) 4
127.0.0.1:6379> lrange num -1 -2  ##start比end靠右,返回空列表
(empty list or set)
127.0.0.1:6379> lrange num -2 -1 ##從右邊第二到右邊第一
1) "3"
2) "4"
127.0.0.1:6379> lpush num 3 4 3 
(integer) 7
127.0.0.1:6379> lrange num 0 -1
1) "3"
2) "4"
3) "3"
4) "2"
5) "1"
6) "3"
7) "4"
127.0.0.1:6379> lrem num 2 3
(integer) 2      ## 一共刪除了兩個
127.0.0.1:6379> lrange num 0 -1
1) "4"
2) "2"
3) "1"
4) "3"
5) "4"
127.0.0.1:6379> 
127.0.0.1:6379> lrem num 0 4  ##刪除所有值為4元素
(integer) 2              ## 一共刪除了兩個
127.0.0.1:6379> lrange num 0 -1
1) "2"
2) "1"
3) "3"
127.0.0.1:6379>  lrem num 2 3
(integer) 1   ##只刪除了一個元素
127.0.0.1:6379> lrange num 0 -1
1) "2"
2) "1"
127.0.0.1:6379> lpush num 1 3
(integer) 4
127.0.0.1:6379> linsert num BEFORE 1 4 ##將4插入左邊第一個1的前面
(integer) 5          ##插入后,一共有5個元素
127.0.0.1:6379> lrange num 0 -1
1) "3"
2) "4"
3) "1"
4) "2"
5) "1"
127.0.0.1:6379> rpoplpush num num1  ##轉移一個元素
"1"
127.0.0.1:6379> lrange num1 0 -1
1) "1"
127.0.0.1:6379> rpoplpush num num1
"2"
127.0.0.1:6379> lrange num1 0 -1
1) "2"
2) "1"
127.0.0.1:6379> lrange num 0 -1  ##num中轉移走了2個元素
1) "3"
2) "4"
3) "1"
127.0.0.1:6379> lpushx num 5  ##鍵名num存在,push成功
(integer) 4
127.0.0.1:6379> lrange num2 0 -1  
(empty list or set)
127.0.0.1:6379> lpushx num2 1 ##鍵名num2不存在,push失敗
(integer) 0
127.0.0.1:6379> lrange num2 0 -1
(empty list or set)

用途

  • 列表頁

set

redis的set使用值為空的散列表(hash table)實現。

  • SADD key member [member ...] 加入set中不存在的元素;返回成功加入的值的個數
    SREM key member [member ... ] 刪除set中存在的元素;返回成功刪除的個數
    SPOP key 隨機選取一個元素,彈出并返回。如果key不存在,返回nil。
  • SMEMBERS key 獲取所有元素
    SISMEMBER key member 判斷元素是否在集合中,存在返回1;key或者member不存在,返回0。
    SCARD key 獲取元素個數
  • SDIFF key1 [key2 ... ] 集合求差集,key1中存在,key2中不存在的
    SINTER key [key ... ] 集合求交集
    SUNION key [key ... ] 集合求并集
    SDIFFSTORE destination key1 [key2 ... ] 集合求差集,并存入destination中。
    SINTERSTORE destination key [key ... ] 集合求交集,并存入destination中。
    SUNIONSTORE destination key [key ... ] 集合求并集,并存入destination中。
  • SRANDMEMBER key [count] 隨機選取count個元素,不帶參數count時,選取一個。count=0,返回空列表;count > 0,選擇min(count, scard)個數據,且不重復,最多返回所有元素; count < 0 選擇|count|個元素,有可能重復。
  • SMOVE source destination member 原子性的將參數中的成員從source鍵移入到destination鍵所關聯的Set中。因此在某一時刻,該成員或者出現在source中,或者出現在destination中。如果該成員在source中并不存在,該命令將不會再執行任何操作并返回0,否則,該成員將從source移入到destination。如果此時該成員已經在destination中存在,那么該命令僅是將該成員從source中移出。如果和Key關聯的Value不是Set,將返回相關的錯誤信息。返回1表示正常移動,0表示source中并不包含參數成員。
127.0.0.1:6379> sadd set1 a b  ##添加兩個不存在的元素
(integer) 2
127.0.0.1:6379> sadd set1 a c  ##添加成功一個元素c
(integer) 1
127.0.0.1:6379> smembers set1 ##獲取所有元素
1) "c"
2) "b"
3) "a"
127.0.0.1:6379> srem set1 d b  ##刪除成功一個元素
(integer) 1
127.0.0.1:6379> smembers set1
1) "c"
2) "a"
127.0.0.1:6379> sismember set1 a 
(integer) 1
127.0.0.1:6379> sadd set1 b
(integer) 1
127.0.0.1:6379> sadd set2 a d e  
(integer) 3
127.0.0.1:6379> sadd set3 c h j 
(integer) 3
127.0.0.1:6379> sdiff set1 set2 set3 ##求差集,在set1中,同時不在set2,set3中的元素
1) "b"
127.0.0.1:6379> scard set1
(integer) 3
127.0.0.1:6379> sdiffstore set4 set1 set2 set3
(integer) 1
127.0.0.1:6379> smembers set4
1) "b"
127.0.0.1:6379> srandmember set1 0
(empty list or set)
127.0.0.1:6379> srandmember set1 1
1) "c"
127.0.0.1:6379> srandmember set1 2
1) "a"
2) "b"
127.0.0.1:6379> srandmember set1 5 ##返回min(5, 3)個元素,且不重復
1) "c"
2) "a"
3) "b"
127.0.0.1:6379> srandmember set1 -5 ## 返回5個元素,可能重復
1) "a"
2) "b"
3) "c"
4) "c"
5) "c"
127.0.0.1:6379> spop set1
"c"
127.0.0.1:6379> smembers set1
1) "b"
2) "a"
127.0.0.1:6379> smembers set2
1) "d"
2) "a"
3) "e"
127.0.0.1:6379> smove set2 set1 c  ##source中不含移動的元素,不操作
(integer) 0
127.0.0.1:6379> smove set2 set1 e  ##移動一個元素到另一個集合
(integer) 1
127.0.0.1:6379> smembers set2
1) "d"
2) "a"
127.0.0.1:6379> smembers set1
1) "b"
2) "a"
3) "e"
用途
  • 唯一性數據集合,如某用戶訪問了哪些店鋪等。
  • 集合相關場景。每個店鋪的訪問用戶是一個set,查找同時訪問多個店鋪的用戶群,查找訪問一類店鋪的用戶群等。

sorted set

有序集合為每一個元素關聯一個分數,并按照分數進行排序。 雖然集合中的每個元素都是不相同的,但是它們的分數卻可以相同。

ZADD key score member [score member ... ] 添加新元素,如果元素已經存在,則更新分數。score支持整型和雙精度浮點型。返回新添加的元素的個數(更新分數的不算)。inf和-inf分別表示正無窮和負無窮。
ZINCRBY key increment member 增加一個元素的分數,increment可以是負數。
ZSCORE key member 查詢元素的分數
ZCARD key 獲取集合中元素的個數
ZCOUNT key min max 指定分數范圍內元素的個數,支持開閉區間。

ZRANGE key start end [WITHSCORES] 按照分數從小到大排序,獲取排名在某個范圍的元素列表,分數可選。閉區間,end可為負數,與lrange參數要求一致。
ZREVRANGE key start end [WITHSCORES] 按照分數從大到小排序。
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count ] 按分數從小到大順序,返回分數在閉區間[min,max]的元素。可以指定開區間,在min前面加上"(",則表示(min, max]。支持inf和-inf。 offset和count指,在獲得的元素列表的基礎上,向后偏移offset個元素,并且只獲取前count個元素。
ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count ] 按分數從大到小順序,返回分數在閉區間[min,max]的元素。注意max和min的參數位置。

ZREM key member [member ... ] 刪除一個或者多個元素
ZREMRANGEBYRANK key start end 按照范圍排名刪除元素,閉區間。索引從0開始。
ZREMRANGEBYSCORE key min max 按照分數排名,刪除分數在[min,max]的元素,支持開區間。

ZRANK key member 按分數從小到大排序,獲取元素member的排名,分數最小的排名是0
ZREVRANK key member 按分數從大到小排序,獲取元素member的排名,分數最大的排名是0

ZINTERSTORE destination numkeys key [key ... ] [WEIGHTS weight [weight ... ]] [AGGREGATE SUM|MIN|MAX] 計算numkeys個有序集合的交集,存儲在有序集合destination里面,返回destination的元素個數。
WEIGHTS參數設置每個集合的權重,每個集合在參與計算時,元素的分數會被乘上該集合的權重。
AGGREGATE表示destination中元素分數的計算方式:

  • AGGREGATE為SUM(默認值)時,則destination中元素的分數,是每個參與計算的集合中該元素分數的和。
  • AGGREGATE為MAX時,則destination中元素的分數,是每個參與計算的集合中該元素分數的最大值。
  • AGGREGATE為MIN時,則destination中元素的分數,是每個參與計算的集合中該元素分數的最小值。

ZUNIONSTORE destination numkeys key [key ... ] [WEIGHTS weight [weight ... ]] [AGGREGATE SUM|MIN|MAX] 與上面類似。

127.0.0.1:6379> zadd zset1 10 sh 40 bj ##添加2個元素
(integer) 2
127.0.0.1:6379> zadd zset1 20 sh 50 hz 80 cd ##更新1個,添加2個
(integer) 2
127.0.0.1:6379> zscore zset1 sh ##獲取sh的分數,已更新為20
"20"
127.0.0.1:6379> zrange zset1 1 -1 ##從第二個元素開始的所有元素
1) "bj"
2) "hz"
3) "cd"
127.0.0.1:6379> zrange zset1 0 -1 withscores ##獲取全部元素
1) "sh"
2) "20"
3) "bj"
4) "40"
5) "hz"
6) "50"
7) "cd"
8) "80"
127.0.0.1:6379> zadd zset1 inf zy ##添加正無窮
(integer) 1
127.0.0.1:6379> zrangebyscore zset1 (50 inf withscores  ## 分數大于50的元素
1) "cd"
2) "80"
3) "zy"
4) "inf"
127.0.0.1:6379> zrangebyscore zset1 50 inf withscores  limit 1 2 
## 分數大于等于50的元素,從第二個開始,取2個
1) "cd"
2) "80"
3) "zy"
4) "inf"
127.0.0.1:6379> zincrby zset1 5 hz ## 給元素hz加5分
"55" 
127.0.0.1:6379> zrangebyscore zset1 (50 inf  ## 添加成功
1) "hz"
2) "cd"
3) "zy"
127.0.0.1:6379> zrange zset1 0 -1 WITHSCORES ##查詢所有元素1) "sh"2) "20"3) "bj"4) "40"5) "hz"6) "55"7) "cd"8) "80"9) "zy"
10) "inf"
127.0.0.1:6379> zcount zset1 0 inf ##獲取元素個數
(integer) 5
127.0.0.1:6379> zcount zset1 (55 inf ##大于55元素個數
(integer) 2127.0.0.1:6379> zrem zset1 zy  ##刪除zy
(integer) 1
127.0.0.1:6379> zrange zset1 0 -1 ## 剩下四個
1) "sh"
2) "bj"
3) "hz"
4) "cd"
127.0.0.1:6379> zremrangebyrank zset1 1 2 ## 按照排名,刪除第2名到第3名
(integer) 2
127.0.0.1:6379> zrange zset1 0 -1  ## 只剩下2個
1) "sh"
2) "cd"127.0.0.1:6379> zadd zs1 1 a 2 b 
(integer) 2
127.0.0.1:6379> zadd zs2 10 a 20 b
(integer) 2
## zs1和zs2取交集,zs1的權重為1,zs2的權重為0.5,所以a的結果分數是1+10*0.5=6
127.0.0.1:6379> zinterstore zs3 2 zs1 zs2 WEIGHTS 1 0.5 AGGREGATE sum
(integer) 2
127.0.0.1:6379> zrange zs3 0 -1 withscores
1) "a"
2) "6"
3) "b"
4) "12"

用途

  • 排序的場景。如按照博客訪問量排序文章列表。key是用戶id,set中的數據是文章id,每個文章id關聯一個score(訪問量)。

與列表的比較

  • 都可以獲取某一范圍的元素
  • 列表類型通過鏈表實現,獲取兩端數據速度快,元素增多后,訪問中間數據速度較慢。所以適合“新鮮事”和“日志”一類的場景。
  • 有序集合是通過散列表和跳躍表實現的,所以讀取位于中間部分的數據的速度也很快。時間復雜度O(log(N))。
  • 列表不能簡單的調整某個元素的位置,有序集合可以。(修改元素的分數)
  • 有序集合比列表更耗內存。

資料:

http://www.cnblogs.com/stephen-liu74/archive/2012/04/16/2370212.html
http://www.cnblogs.com/allout-geng/p/5923047.html

轉載于:https://www.cnblogs.com/shoren/p/redis-types.html

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

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

相關文章

Python與MySQL數據庫連接

Python3 MySQL 數據庫連接 MySQL 可應用于多種語言&#xff0c;包括 PERL, C, C, JAVA 和 PHP 什么是 PyMySQL&#xff1f; PyMySQL 是在 Python3.x 版本中用于連接 MySQL 服務器的一個庫&#xff0c;Python2中則使用mysqldb。 PyMySQL 遵循 Python 數據庫 API v2.0 規范&a…

mysql 日志_MySQL日志系統

MySQL日志系統MySQL有兩個重要的日志系統&#xff0c;分別是 redo log (重做日志) 和 bin log (歸檔日志) 。這兩種日志有以下三點不同。redo log 是 InnoDB 引擎特有的&#xff1b;binlog 是 MySQL 的 Server 層實現的&#xff0c;所有引擎都可以使用。redo log 是物理日志&am…

盛大游戲杯第十五屆上海大學程序設計聯賽暨上海金馬五校賽

編程1小時&#xff0c;提交4小時 做這種比賽一定要選一個好OJ啊 黑白圖像直方圖 發布時間: 2017年7月8日 21:00 最后更新: 2017年7月8日 22:38 時間限制: 1000ms 內存限制: 128M 描述 在一個矩形的灰度圖像上&#xff0c;每個像素點或者是黑色的或者是白色的。黑色像素點…

對幾個重要問題的闡述

由于DPB中間的參考幀的MV都是以4X4塊為單位&#xff0c;現在以8X8塊作Direct mode模式&#xff0c;所以必須對子塊的MV作合并&#xff0c; JM采用的東西是如下圖的方式: x o | o x o o | o o - - - - - o o | o o x o | o x 每8X8塊取外角上的4X4塊的MV. 算法如下: <<<…

【MySQL】基于Docker的Mysql主從復制搭建

基于Docker的Mysql主從復制搭建 為什么基于Docker搭建&#xff1f; 資源有限 虛擬機搭建對機器配置有要求&#xff0c;并且安裝mysql步驟繁瑣 一臺機器上可以運行多個Docker容器 Docker容器之間相互獨立&#xff0c;有獨立ip&#xff0c;互不沖突 Docker使用步驟簡便&#xf…

Web開發介紹

Web開發介紹 一,認識一個網站 最早的軟件都是運行在大型機上的&#xff0c;軟件使用者通過“啞終端”登陸到大型機上去運行軟件。 后來隨著PC機的興起&#xff0c;軟件開始主要運行在桌面上&#xff0c;而數據庫這樣的軟件運行在服務器端&#xff0c;這種Client/Server模式簡…

python云端系統開發入門_Python云端系統開發入門

第01課 初識Django 課時1Django框架介紹 00 : 14 : 33 開始學習 課時2工程搭建1 00 : 28 : 50 開始學習 課時3工程搭建2 00 : 13 : 22 開始學習 第02課 請求和響應的處理 課時1獲取請求url的參數 00 : 07 : 57 開始學習 課時2獲取請求url的查詢字符串 00 : 12 : 01 開始學習 課…

IBM 安全部門 CTO:AI 必須被重新定義為“增強智能”

編者按&#xff1a;隨著人工智能的發展&#xff0c;人們對它逐漸有誤會、恐懼之心。如果能夠利用好人工智能&#xff0c;特別是在網絡安全領域&#xff0c;它將成為人類對抗網絡犯罪強有力的武器。IBM 安全部門的 CTO Sandy Bird 認為現在的人工智能應該被重新定義為“增強智能…

【Nginx】通過反向代理配置本地圖床功能

安裝nginx sudo apt-get install nginx配置nginx.conf sudo vim /etc/nginx/nginx.conf worker_processes auto; pid /run/nginx.pid;events {worker_connections 768;# multi_accept on; }http {sendfile on;tcp_nopush on;tcp_nodelay on;keepalive_timeout 65;types_hash…

構建之法第二章

單元測試&#xff1a;一個開發人員要面對測試一個單元時只給出單元的代碼而沒有規格說明這樣吃力不討好的任務.你怎樣做才會有更多的收獲,而不僅僅是發現編譯器的Bug?第一步是理解這個單元原本要做什么, --- 不是它實際上做了什么. 比較有效的方法是倒推出一個概要的規格說明.…

幀內預測模式提取

if (input->rdopt) { int mb_available_up; int mb_available_left; int mb_available_up_left; min_rdcost max_rdcost; // precompute all new chroma intra prediction modes // 對色度進行幀內預測 IntraChromaPredict…

Django簡介以及安裝

Django簡介 1. 認識Django Django是一個高級的Python Web框架&#xff0c;它鼓勵快速開發和清潔&#xff0c;務實的設計。由經驗豐富的開發人員構建&#xff0c;它負責Web開發的許多麻煩&#xff0c;因此您可以專注于編寫應用程序&#xff0c;而無需重新創建輪子。它是免費的…

python基礎筆試面試題_python基礎面試常見題

Python是目前市面上&#xff0c;我個人認為是最簡潔、最優雅、最有前途、最全能的編程語言&#xff0c;沒有之一。 2、通過什么途徑學習的Python&#xff1f; 通過自學&#xff0c;包括網上查看一些視頻&#xff0c;購買一些相關專業的書籍。 3、Python和Java、PHP、C、C#、C等…

django-rest-swagger顯示接口備注內容

Swagger是一個API開發者的工具框架&#xff0c;用於生成、描述、調用和可視化RESTful風格的Web服務。總體目標是使客戶端和文件系統服務器以同樣的速度來更新&#xff0c;方法&#xff0c;參數和模型緊密集成到服務器端的代碼中&#xff0c;允許API始終保持同步。 在使用 djan…

安全和連接是IoT聯網設備2大挑戰

IoT正在推動500億個聯網設備在未來10年內從工業、零售、智能照明、智慧城市、汽車、農業、可穿戴設備、智能建筑、醫療市場涌現出來&#xff0c;ARM處理器部門市場營銷總監Ian Smythe表示&#xff1a;“到2020年&#xff0c;消費電子和健康、智慧城市和物流、汽車和運輸領域的I…

windows下部署免費ssl證書(letsencrypt)

隨著網絡的發展&#xff0c;網絡安全也越來越重要&#xff0c;對于網站來說&#xff0c;從Http升級到https也是我們要做的首要事情。要實現https&#xff0c;首先我們需要申請一張SSL證書&#xff0c;這篇文章我主要介紹下邊這幾個方面&#xff1a; 1. SSL簡單介紹 2. 免費Lete…

Django之URLconf路由

URLconf路由 一個干凈優雅的URL方案是高質量Web應用程序中的一個重要細節。 Django可以讓你設計URL&#xff0c;無論你想要什么&#xff0c;沒有框架限制。 要為應用程序設計URL&#xff0c;您可以非正式地創建一個名為URLconf&#xff08;URL配置&#xff09;的Python模塊。…

python中什么是關鍵字參數_如何使用python語言中函數的關鍵字參數的用法

一般情況下&#xff0c;在調用函數時&#xff0c;使用的是位置參數&#xff0c;即是按照參數的位置來傳值&#xff1b;關鍵字參數是按照定義函數傳入的參數名稱來傳值的。那么&#xff0c;關鍵字參數怎么使用&#xff1f;工具/原料 python pycharm 截圖工具 WPS 方法/步驟 1 打…

HTML塊級元素

在HTML5出現之前&#xff0c;人們一般把元素分為塊級、內聯和內聯塊元素。本文將詳細介紹HTML塊級元素h標題(Heading)元素有六個不同的級別&#xff0c;<h1>是最高級的&#xff0c;而<h6>則是最低的。一個標題元素能簡要描述該節的主題從<h1>到<h6>&am…

【SSL】HTTPS配置全過程

服務器配置https協議 HTTPS&#xff0c;是以安全為目標的HTTP通道&#xff0c;簡單講是HTTP的安全版。即HTTP下加入SSL層&#xff0c;HTTPS的安全基礎是SSL&#xff0c;因此加密的詳細內容就需要SSL。 配置HTTPS就需要證書&#xff0c;關于證書方面不做過多解釋&#xff0c;只…