dir數據類型?
一,弦
String是redis最基本的類型,你可以理解為和Memcached完全一樣的類型,一個鍵對應一個值。
字符串類型是二進制安全的。表示redis可以包含任何數據的字符串。如jpg圖片或序列化對象。
字符串類型是Redis最基本的數據類型,字符串類型的值最多可以存儲512MB。
命令:設置和獲取命令
第二,哈希
Redihash是keygtvalue對的集合。
Redihash是字符串類型的字段和值的映射表,hash特別適合存儲對象。
hmset,HGET命令,HMSET設置兩個fieldgtvalue對,HGET獲取對應字段對應的值。
第三,名單
列表是一個簡單的字符串列表,按照插入的順序排序。您可以將元素添加到列表的頭部(左側)或尾部(右側)。
列表最多可以存儲232-1個元素(4294967295,每個列表可以存儲超過40億個)。
l脈沖設定值,l范圍值。
第四,設置
redis集合是字符串的無序集合。集合是通過哈希表實現的。
將string元素添加到與key對應的setset中,并使用sadd命令。返回1表示成功,0表示已經存在于集合中,返回錯誤表示key對應的集合不存在。
使用smembers命令查看
集合中元素的唯一性,第二個插入的元素將被忽略。
一個集合的最大成員數是232-1(4294967295,每個集合可以存儲超過40億個成員)。
動詞(verb的縮寫)zset
redis的zset和set一樣,是string類型元素的集合,不允許有重復的成員。
不同之處在于,每個元素都與一個double類型的分數相關聯。Redis通過分數將集合成員從小到大排序。zset的成員是唯一的,但是分數可以重復。
向集合中添加一個元素。如果集合中存在該元素,則更新相應的score:zaddkeyscor
jpeg編碼規則?
本文簡要總結了JPEG基本系統的編碼流程。
編碼需要DCT、量化、Z串行化、系數編碼(DC差分脈沖調制編碼、DC系數中間格式計算、交流差分脈沖調制編碼、交流系數中間格式計算)、熵編碼,最后按照指定格式打包成為JPEG圖片。
將圖像分成若干個8×8的塊后,對每個塊進行離散余弦變換,目的是將圖像塊按頻率分解,得到其頻譜。
與傅立葉變換類似,DCT的目的是將圖像分解成不同頻率的基本分量的線性組合。
實際上,DCT是DFT的一種特殊形式,用來擦除虛(奇)部。因為實偶函數的DFT仍然是實偶函數,我們把時域函數相乘并延拓成偶函數,所以頻域也變成了實偶函數。當然,存放時可以對折,消除冗余。
為什么需要DCT?對于每一個圖像塊,如果一定要丟棄,我們會盡可能多的保留低頻成分,降低高頻成分的分辨率。同時,高頻分量通常很少,而DC分量雖然值很大,但相鄰塊之間差別很小。
因此,我們對低頻分量采用較低的量化系數,對高頻分量采用較高的量化系數。
所謂量化,就是將浮點值X(可能只以更高精度的整數表示形式存在)轉換為步進整數值Y的過程,yround(x/q)中的q就是量化系數。
然后我們做Z序列化,按照Z的形狀把二維矩陣展平成一個向量。
考慮到相鄰塊之間DC分量的微小差異,我們首先對DC分量和前一個塊進行差分。這個過程稱為差分脈沖調制編碼。
現在向量中有大量的零,絕對值小的數出現的概率遠大于絕對值大的數。
我們使用游程編碼(RLE)將序列切割成0,0,…,0,x形式的幾個片段,每個片段由y(≥0)個0和一個x(gt;0),表示為(y,len(x),x),其中len(x)是反碼二進制表示中x的長度。這種三元組的表示稱為中間格式。
(注:DC分量也包括在此圖中,嚴格分開,RLE只考慮交流分量。)
現在考慮(y,l,x)三元組的編碼。我們用一個字節的高4位和低4位分別存儲兩個uint4,Y和L,對這個字節進行霍夫曼編碼。至于x這個小家伙,長度也是有記錄的,直接寫到二進制流里就行了。
需要指出的是,這里我們省略了一些特例。比如如何處理連續零的個數超過15,交流分量結束