1. 程式人生 > >兄弟連學python---Redis基礎知識

兄弟連學python---Redis基礎知識

zhang 定位 clas pop move car string類型 add 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"
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基礎知識