兄弟連學python---Redis基礎知識
阿新 • • 發佈:2017-12-17
zhang 定位 clas pop move car string類型 add tran
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"
OK
redis 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) 1
redis 127.0.0.1:6379> lpush runoob mongodb
(integer) 2
redis 127.0.0.1:6379> lpush runoob rabitmq
(integer) 3
redis 127.0.0.1:6379> lrange runoob 0 10
1) "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) 1 redis 127.0.0.1:6379> sadd runoob mongodb (integer) 1 redis 127.0.0.1:6379> sadd runoob rabitmq (integer) 1 redis 127.0.0.1:6379> sadd runoob rabitmq (integer) 0 redis 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 命令 添加元素到集合,元素在集合中存在則更新對應score zadd key score member
實例
redis 127.0.0.1:6379> zadd runoob 0 redis (integer) 1 redis 127.0.0.1:6379> zadd runoob 0 mongodb (integer) 1 redis 127.0.0.1:6379> zadd runoob 0 rabitmq (integer) 1 redis 127.0.0.1:6379> zadd runoob 0 rabitmq (integer) 0 redis 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 200 OK 127.0.0.1:6379> HGETALL user:1 1) "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基礎知識