標籤:card cache emc 簡單 雜湊表 redis 重複 srand tran
Redis 資料類型
Redis支援五種資料類型: string(字串) list(列表) set(集合) zset(有序集合) hash(雜湊)
String(字串)
string是redis最基本的類型,你可以理解成與Memcached一模一樣的類型,一個key對應一個value。string類型是二進位安全的。意思是redis的string可以包含任何資料。比如jpg圖片或者序列化的對象 。string類型是Redis最基本的資料類型,一個鍵最大能儲存512MB。
執行個體
redis 127.0.0.1:6379> SET name "runoob"OKredis 127.0.0.1:6379> GET name"runoob"在以上執行個體中我們使用了 Redis 的 SET 和 GET 命令。鍵為 name,對應的值為 runoob。注意:一個鍵最大能儲存512MB。-------------------------------------------- set 命令:設定一個鍵和值,鍵存在則只覆蓋,返回ok > set 鍵 值 例如: >set name zhangsan? get 命令:擷取一個鍵的值,傳回值 > get 鍵 例如:>get name? setnx命令:設定一個不存在的鍵和值(防止覆蓋), > setnx 鍵 值 若鍵已存在則返回0表示失敗? setex命令:設定一個指定有效期間的鍵和值(單位秒) > setex 鍵 [有效時間] 值 例如: >setex color 10 red 不寫有效時間則表示永久有效,等價於set? setrange命令:替換子字串 (替換長度由子子串長度決定) > setrange 鍵 位置 子字串 > setrange name 4 aa 將name鍵對應值的第4個位置開始替換? mset命令:大量設定鍵和值,成功則返回ok > mset 鍵1 值1 鍵2 值2 鍵3 值3 ....? msetnx命令:大量設定不存在的鍵和值,成功則返回ok > msetnx 鍵1 值1 鍵2 值2 鍵3 值3 ....? getset命令:擷取原值,並設定新值 > getset 鍵 新值? getrange命令:擷取指定範圍的值 >getrange 鍵 0 4 //擷取指定0到4位置上的值? mget命令: 批量擷取值 >mget 鍵1 鍵2 鍵3....? incr命令: 指定鍵的值做加加操作,返回加後的結果。 > 鍵 例如: >incr kid incrby命令: 設定某個鍵加上指定值 > incrby 鍵 m //其中m可以是正整數或負整數? decr命令: 指定鍵的值做減減操作,返回減後的結果。 > decr 鍵 例如: >decr kid decrby命令: 設定某個鍵減上指定值 > decrby 鍵 m //其中m可以是正整數或負整數? append命令:給指定key的字串追加value,返回新字串值的長度 >append 鍵 追加字串? strlen求長度 >strlen 鍵名 //返回對應的值。 del命令:刪除指定鍵,成功則返回1 > del 鍵
List(列表)
Redis 列表是簡單的字串列表,按照插入順序排序。你可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)。
執行個體
redis 127.0.0.1:6379> lpush runoob redis(integer) 1redis 127.0.0.1:6379> lpush runoob mongodb(integer) 2redis 127.0.0.1:6379> lpush runoob rabitmq(integer) 3redis 127.0.0.1:6379> lrange runoob 0 101) "rabitmq"2) "mongodb"3) "redis"redis 127.0.0.1:6379>列表最多可儲存 232 - 1 元素 (4294967295, 每個列表可儲存40多億)。?-------------------------------------------- list即可以作為“棧”也可以作為"隊列"。操作: >lpush list1 "world" //在list1頭部壓入一個字串 >lpush list1 "hello" // 在list1頭部壓入一個字串 >lrange list1 0 -1 //擷取list1中內容 0:表示開頭 -1表示結尾。? >rpush list2 "world" //在list2尾部壓入一個字串 >rpush list2 "hello" // 在list2尾部壓入一個字串 >lrange list2 0 -1 //擷取list2中內容 0:表示開頭 -1表示結尾。? >linsert list2 before hello there 在key對應list的特定位置前或後添加字串? >lset list2 1 "four" 修改指定索引位置上的值? >lrem list2 2 "hello" //刪除前兩個hello值 >lrem list2 -2 "hello" //刪除後兩個hello值 >lrem list2 0 "hello" //刪除所有hello值? >ltrim mylist8 1 3 //刪除此範圍外的值? >lpop list2 //從list2的頭部刪除元素,並返回刪除元素 >rpop list2 //從list2的尾部刪除元素,並返回刪除元素 >rpoplpush list1 list2 //將list1的尾部一個元素移出到list2頭部。並返回? >lindex list2 1 //返回list2中索引位置上的元素 >llen list2 //返回list2上長度
Set(無序集合)
Redis的Set是string類型的無序集合。集合是通過雜湊表實現的,所以添加,刪除,尋找的複雜度都是O(1)。sadd 命令添加一個string元素到,key對應的set集合中,成功返回1,如果元素已經在集合中返回0,key對應的set不存在返回錯誤。sadd key member
執行個體
redis 127.0.0.1:6379> sadd runoob redis(integer) 1redis 127.0.0.1:6379> sadd runoob mongodb(integer) 1redis 127.0.0.1:6379> sadd runoob rabitmq(integer) 1redis 127.0.0.1:6379> sadd runoob rabitmq(integer) 0redis 127.0.0.1:6379> smembers runoob?1) "rabitmq"2) "mongodb"3) "redis"注意:以上執行個體中 rabitmq 添加了兩次,但根據集合內元素的唯一性,第二次插入的元素將被忽略。集合中最大的成員數為 232 - 1(4294967295, 每個集合可儲存40多億個成員)。?------------------------------- >sadd myset "hello" //向myset中添加一個元素 成功返回1,失敗(重複)返回0? >smembers myset //擷取myset中的所有元素(結果是無序的)? >srem myset "one" //從myset中刪除一個one 成功返回1,失敗(不存在)返回0? >spop myset //隨機返回並刪除myset中的一個元素 >srandmember myset //隨機擷取myset中的一個元素,但是不刪除? > smove myset1 myset2 zhangsan:將myset1中zhangsan移動到myset2中 > scard myset1 返回myset1的個數 > sismember myset zhangsan:判斷張三是否在myset中? >sdiff myset1 myset2 //返回兩個集合的差集 以myset1為標準,擷取myset2中不存在的。 >sdiffstore dstset myset1 myset2 ...// 返回所有集合的差集,並儲存到dstset中? >sinter myset1 myset2 myset3... // 返回N個集合中的交集 >sinterstore dstset myset1 myset2 ... // 返回N個集合的交集並儲存到dstset中? > sunion myset1 myset2 ...//返回所有集合的並集 > sunionstore dstset myset1 myset2// 返回所有集合的並集,並儲存到dstset中
zset(sorted set:有序集合)
Redis zset 和 set 一樣也是string類型元素的集合,且不允許重複的成員。不同的是每個元素都會關聯一個double類型的分數。redis正是通過分數來為集合中的成員進行從小到大的排序。zset的成員是唯一的,但分數(score)卻可以重複。zadd 命令添加元素到集合,元素在集合中存在則更新對應scorezadd key score member
執行個體
redis 127.0.0.1:6379> zadd runoob 0 redis(integer) 1redis 127.0.0.1:6379> zadd runoob 0 mongodb(integer) 1redis 127.0.0.1:6379> zadd runoob 0 rabitmq(integer) 1redis 127.0.0.1:6379> zadd runoob 0 rabitmq(integer) 0redis 127.0.0.1:6379> ZRANGEBYSCORE runoob 0 1000?1) "redis"2) "mongodb"3) "rabitmq"?----------------------------------------? > zadd zset 1 one 向zset中添加one,排序為1排序 > zrem zset one:刪除zset中one? > zincrby zset 2 one:如果one存在,則順序增加2,如果one不存在,那麼就是2? > zrank zset one:返回one在zset中排名(從小到大的排序) > zrevrank zset one:返回one在zset中排名(從大到小的排序)? > zrange zset 0 -1 withscores:根據score排序(根據score從小到大排序) > zrevrange zset 0 -1 withscores:根據score排序(根據score從大到小排序)? > zrangebyscore zset 2 3 withscores:返回集合中score在給定區間的元素(包含2和5) > zcount zset 2 3:返回集合中給定區間的數量 > zcard zset:返回集合中元素的個數 > zscore zset one:返回one元素的score > zremrangebyrank zset 3 3:刪除集合中排名在給定區間的元素 > zremrangebyscore zset 1 2:將zset中從小到大排序結果的score在1-2之間的刪除
Hash(雜湊)
Redis hash 是一個索引值對集合。Redis hash是一個string類型的field和value的映射表,hash特別適合用於儲存物件。
執行個體
127.0.0.1:6379> HMSET user:1 username runoob password runoob points 200OK127.0.0.1:6379> HGETALL user:11) "username"2) "runoob"3) "password"4) "runoob"5) "points"6) "200"以上執行個體中 hash 資料類型儲存了包含使用者指令碼資訊的使用者物件。 執行個體中我們使用了 Redis HMSET, HGETALL 命令,user:1 為索引值。每個 hash 可以儲存 232 -1 索引值對(40多億)。------------------------------------------hset命令:設定一個雜湊表的鍵和值 >hset hash名 鍵 值 如:>hset user:001 name zhangsan hget命令: 擷取執行雜湊名中的鍵對應值? hsetnx命令:設定一個雜湊表中不存在的鍵和值 >hsetnx hash名 鍵 值 //成功返回1,失敗返回0 如:>hsetnx user:001 name zhangsan? hmset命令:hmset user:001 username zhangsan age 20 sex 1 大量設定 hmget user:001 username age sex:批量擷取值? >hexists user:001 name //是否存在, 若存在返回1? >hlen user:001 //擷取某雜湊user001名中鍵的數量? >hdel user:001 name //刪除雜湊user:001 中name鍵? >hkeys user:002 //返回雜湊名為user:002中的所有鍵。 >hvals user:002 //返回雜湊名為user:002中的所有值。 >hgetall user:002 //返回雜湊名為user:002中的所有鍵和值。
Redis進階實用特性為Redis添加密碼
警告:因為redis 速度相當快,所以在一台比較好的伺服器下,一個外部的使用者可以在一秒鐘進行150K 次的密碼嘗試,這意味著你需要指定非常非常強大的密碼來防止暴力破解。?1.進入設定檔: vi /usr/local/redis/etc/redis.conf 設定:requirepass redis的密碼2. 重啟服務:# ./redis-cli shutdown 執行關閉# ./redis-server /usr/local/redis/etc/redis.conf 啟動3. 登入(兩種)# ./redis-cli 用戶端命令連結的伺服器>auth 密碼值 //授權後方可使用?# ./redis-cli -a 密碼 //串連時指定密碼來進行授權
兄弟連學python---Redis基礎知識