1. 程式人生 > >Redis研究(三)—字串型別

Redis研究(三)—字串型別

在介紹Redis字串型別之前,先來了解幾個比較基礎的命令作為熱身。

1.獲得符合規則的鍵名列表

keys pattern
pattern支援glob風格萬用字元格式,具體規則如下:
匹配一個字元
* 匹配任意個(包括0個)字元
[] 匹配括號間的任一字元,可以使用“-”符號表示一個範圍,如a[b-d]可以匹配“ab”,“ac”,“ad”
\x 匹配字元x,用於轉義符號。如要匹配“?”就需要使用\?

Redis不區分命令大小寫。

2.判斷一個鍵是否存在

exists key
存在返回1,不存在返回0

3.刪除鍵

del key [key ...]
可以刪除一個或者多個鍵,返回值是刪除的鍵的個數。

del命令的引數不支援萬用字元,但我們可以結合linux的管道和xargs命令自己實現刪除所有符合規則的鍵,

比如說要刪除所有以“user:”開頭的鍵,就可以執行

redis-cli keys "user:*" | xargs redis-cli del
另外,由於del命令支援多個鍵作為引數,所以還可以執行
redis-cli del 'redis-cli keys "user:*"'
來達到同樣的效果,但是效能更好。

4.獲得鍵值的資料型別

type key
返回值可能是string字串,hash雜湊,list列表,set集合,zset有序集合

字串型別

1.介紹

最基本的資料型別,能儲存任何形式的字串,包括二進位制資料。可以儲存json物件,甚至一張圖片,

一個字串型別鍵允許儲存的資料的最大容量是512mb,Redis3.0版本中可能會放寬這一限制。

2.命令

(1)賦值與取值

當鍵不存在時會返回空結果。

(2)遞增數字

當儲存的鍵值時整數形式時,incr命令作用是讓當前鍵遞增,並返回遞增後的值

當要操作的鍵不存在是預設起始值為0.,當鍵值不是整數型別是,Redis會提示錯誤。

多個客戶端同時連線到Redis時incr會可能出現競態條件,因為incr在內的所有Redis命令都是原子操作

所以會出現當多個客戶端同時改變一個值時,只會成功改變一次,不會累計增加。

3.實踐

Redis對於鍵的命令規範: “物件型別:物件ID:物件屬性”

eg:user:1:friends來儲存ID為1的使用者的好友列表。

下面就是一個列子:部落格的訪問量功能

#首先獲得新文章的ID
$postID = incr posts:count
#將部落格文章的諸多元素序列化成字串
#序列化函式(如php的serialize和JavaScript的JSON.stringify)將他們轉換成一個字串,除此之外,因為字串型別鍵可以儲存二進位制資料,所以也可以使用MessagePack進行序列化,速度更快,佔用空間也更小
$serializedPost = serialize($title,$content,$author,$time)
#把序列化後的字串存一個字串型別的鍵中
$set post:$postID:data,$serializedPost

獲取文章資料的虛擬碼如下(以訪問ID為42的文章為列子):

#從Redis中讀取文章資料
$serializedPost = get post:42:data
#將文章資料反序列化成文章的各個元素
$title,$content,$author,$time=unserialize($serializedPost)
#獲取並遞增文章的訪問數量
$count=incr post:42:page.view

4.命令拾遺

(1)增加指定的整數

incrby ket increment

(2)減少指定的整數

decr key
decrby key decrement

(3)增加指定浮點數

incrbyfloat key increment

(4)向尾部追加值

append key value
如果鍵值不存在則將該鍵的值設定為value,返回值是追加後字串的總長度

append命令的第二個引數加了雙引號,原因是該引數包含空格。

(5)獲取字串長度

strlen key

(6)同時獲得/設定多個鍵值

mset key1 v1 key2 v2 key3 v3
get key2
mget key1 key2

(7)位操作
getbit key offset
setbit key offset value
bitcount key [start] [end]
bittop operation destkey key [key ...]

一個位元組由8個二進位制位組成,Redis提供了4個命令可以直接對二進位制位進行操作。

bar的3個字母對應的ASCII碼分別為98,97,114.轉換成二進位制位結構圖所示

getbit命令可以獲得一個字串型別鍵指定位置的二進位制位的值(0/1),索引從0開始。如超出實際長度則預設位置為0.

setbit命令可以設定指定位置的二進位制位的值,返回值是該位置的舊值


如果要設定的位置超過了鍵值的二進位制位的長度,setbit命令會自動將中間的二進位制位設定為0

同理設定一個不存在的鍵的指定二進位制位的值會自動將其前面的位賦值為0

bitcount命令返回值是1的二進位制位個數,也可以通過引數來限制統計的位元組範圍,只統計兩個位元組“aa”


bitop命令可以對多個字串鍵進行位運算,並將結果儲存在destkey引數指定的鍵中。支援的運算操作有and,or,xor和not。對bar和aar進行or運算

運算過程如下:

getbit和setbit的時間複雜度都是O(1),所以讀取二進位制位值效能很高。

相關推薦

Redis研究字串型別

在介紹Redis字串型別之前,先來了解幾個比較基礎的命令作為熱身。 1.獲得符合規則的鍵名列表 keys patternpattern支援glob風格萬用字元格式,具體規則如下: ? 匹配一個字元 * 匹配任意個(包括0個)字元 [] 匹配括號間的任一字元,可以使用“-

redis原始碼分析與思考十三——字串型別的命令實現(t_string.c)

    在對字串操作的命令中,主要有增加刪查該、批處理操作以及編碼的轉換命令,現在列出對字串物件操作的主要常用命令: 常用命令表 命令 對應操作 時間複雜度

Redis 筆記雜湊型別命令

雜湊型別 hash相關的配置 在redis.conf檔案中,有關hash的配置如下 hash-max-ziplist-entries 512 //最大位元組說為512位元組 hash-max-ziplist-value 64 //最多欄位數為64

Redis研究—雜湊型別

雜湊型別(hash)的鍵值也是一種字典結構,其儲存了欄位(field)和欄位值的對映,但欄位值只能是字串,不支援其他資料型別。 雜湊型別不能巢狀其他的資料型別。一個雜湊型別鍵可以包含至多2^32-1個欄位。 一、介紹 雜湊型別適合儲存物件:使用物件類別和ID構成鍵名,使用

Redis入門Redis keys 命令和 Redis 字串命令

Redis keys 命令 序號 命令 描述 1 DEL key 該命令用於在 key 存在時刪除 key,返回被刪除 key 的數量 2 DU

Redis研究—簡介

創始人 存儲結構 隊列 cached tar 寫入 關系 退出 使用 http://blog.csdn.net/wtyvhreal/article/details/41855327 Redis是一個開源的高性能鍵值對數據庫。它通過提供多種鍵值數據類型來適應不同場景下的

redis 實驗主從復制

系統/運維 Linux 先在主機啟動redis-server再開一個6380的端口redis-server --port 6380 --slaveof 127.0.0.1 6379單機雙實例輸入info看replication狀態主機master role另外一個實例主實例存取正常,從實例只能讀取無法

Go語言學習筆記 集合型別

陣列 陣列中包含的每個資料被稱為陣列元素(element),一個數組包含的元素個數被稱為陣列的長度。 [32]byte // 長度為32的陣列,每個元素為一個位元組 [2*N] struct { x, y int32 } // 複雜型別陣列 [1000]*float64 // 指標陣列 [3

ES6學習---- 字串的擴充套件

我只總結一些常用的。涉及到位元組方面的方法暫時不作記錄。 1.startsWith 和endsWith、includes,其中他們都有兩個引數,第一引數是包含的字串,第二個引數是個n數字,includes和startsWith的第二個引數表示是從這個索引開始,endsWith的索引是

Python3常用資料結構及方法介紹——字串

三.字串 特點:不可更改 1.基本操作(同其他序列) ①索引 >>> 'python'[2] 't' ②分片 >>> 'beauty'[0:2] 'be' >>> 'beauty'[::2] 'bat' ③相加/相乘

JavaScript-X3DOM學習筆記-route型別節點功能的演示

VRML2 Source Book例子的基礎上做了些修改,使之能在x3dom 1.7.3中能正確執行。 顯示效果為一個跳動的磚頭。 x3dom_route.html <html> <head> <meta charset="utf-8">

python的基本用法字串常用函式

字串常用函式 # s='.abcd.'# new_s=s.strip('.')#預設去掉字串兩邊的空格和換行符,想去掉什麼括號中就寫什麼# print('s',s)# print('new_s',new_s)# t='.hhjDDDhjhj.'# print(t.rstrip('.'))# print(t.

《瘋狂Java講義》學習筆記資料型別和運算子

1、註釋 Java語言的註釋一共有三種類型 單行註釋:用雙斜線 ”//” 表示 多行註釋:用 /*------------------*/ 表示 文件註釋:用 /**-----------------*/ 表示 如果編寫Java原始碼時添加了合適的文件註釋,然後通過JDK提供的jav

Redis學習 Redis 主從模式詳解

不管任何程式,只執行一個例項都是不可靠的,一旦因為網路原因導致所在機器不可達,或者所在伺服器掛掉,那麼這個程式將不能對外提供服務了,Redis也是一樣的。不過Redis的主從並不是解決這個問題的,一些對Redis主從的理解,見這篇部落格:http://www.cnblogs.com/yiwangzh

Kotlin初體驗- 字串 和 容器

字串 字串與基本資料型別轉換 基本資料型別轉String,在上一篇部落格已經講過,呼叫toString(),反過來,字串又該如何轉換成基本資料型別呢?請看下錶 字串轉換為其他資料型別的Kotlin與Java方式對比 字串轉換目標 Kotlin轉換方式 J

python--基礎學習字串單引號、雙引號、引號

#單引號str1='python'#單引號中使用雙引號str2='"python"'#雙引號中使用單引號str3="'python'"#三單引號str4='''python'''#三單引號中間使用雙引號str5='''"python"'''#三單引號中有換行符str6='''hellopython'''#

劍指Offer題解字串問題

#include<vector> using namespace std; // getline(cin, str); //一行一行輸入可輸入空格 #pragma region 替換空格 字串 //請實現一個函式,將一個字串中的每個空格替換成“

EMV規範學習與研究——應用初始化

應用初始化目的: ①通知卡片新交易開始; ②將交易所需的資料傳送給卡片; ③從卡片上返回AIP和AFL; ④決定交易是否被允許執行; 應用初始化步驟:(GPO命令的格式) 設定TVR和TSI中所有位為0,並利用GPO命令從IC卡獲取AIP和AFL。若卡片資料不

CSS基礎---文字型別

一、CSS文字樣式 1、CSS文字樣式 CSS文字樣式包含以下內容 屬性  名稱  值 font-family  字型  中文字型需要巢狀在引號中,多字型使用英文逗號 font-size  字號  number,單位為px

Redis實踐安裝第三方模組rejson

準備基礎環境 Centos7&&Ubuntu安裝git: sudo apt-get install build-essential #這是Ubuntu上的命令 yum g