一、Redis數據庫
1、redis 是一個開源的使用 ANSI C語言編寫、遵守 BSD 協議、支持網絡、可基於內存亦可持久化(週期性的把內存中的數據寫入到硬盤中,重啓的時候再次加載進行使用)的日誌型、Kye - Value數據庫
2、redis 也被稱爲數據結構服務器,因爲它的 value 可以是字符串、哈希、列表、集合、有序集合等類型
3、redis 支持數據的備份,即 master-slave 模式的數據備份
4、基本的數據結構:
string:字符串 list:列表 hash:散列
set:集合 sorted set(zset):有序集合
5、redis 連接
本地連接: redis -cli
遠程連接linux: redis -cli 主機地址 -p 6379
二、 redis數據類型——string字符串
1、設置 key - value (key 的命名規範:不允許出現空格和 \n ( 換行 ),其餘大部分字符都可以使用)
設置鍵值:set key value
一次設置多個鍵值:mset key1 value1 key2 value2 ...... (鍵值之間,使用空格隔開)
獲取鍵值:get key
一次獲得多個 key 的值:mget key1 key2 key3 (key 與 key 之間使用空格隔開)
2、incr、decr
incr 做自增操作,可以對某個 key 的 value 進行 +1操作
decr 做自減操作,可以對某個 key 的 value 進行 -1操作
3、incrby、decrby :指定增加 / 減少的數值
4、keys * 獲取 redis 中所有的key
5、mysql 數據在 redis 中的存儲格式
Mysql數據表使用行和列的組合儲存數據,以【it_user】表爲例
id | usename | |
1 | asion | [email protected] |
2 | makr | [email protected] |
①如果需要把上面的 mysql 的數據存儲到 redis 裏面,存儲的 key 如何命名,一般需要分如下幾步來操作:
a:將 mysql 的表名作爲 redis 的 key 的第一部分 (it_user)
b:將 mysql 的表的主鍵名放在上面的前綴之後,作爲 key 的第二部分,使用冒號分隔(it_user:id)
c:對應記錄的主鍵值作爲 key 的第三部分(it_user:id:1 )
d:將 mysql 裏面的其他的字段作爲 key 的第四部分(it_user:id:1 :username)
②把上面 mysql 表裏面的記錄保存在 redis:
⑴ 存儲第一條數據:
⑵ 存儲第二條數據:
⑶ 最終在 redis 中的儲存如下:
③獲取剛剛儲存的信息
6、exists key 判斷指定鍵是否存在,存在返回1,不存在返回 0
‘
7、type key 返回指定鍵的數值類型
8、del key1 key2 key3 刪除指定鍵,可以刪除一個也可以刪除多個,鍵與鍵之間用空格隔開
9、rename key newkey 重命名
10、dbsize 返回當前數據庫中 key 的數量
11、expire key seconds 爲 key 指定過期時間,單位爲 s,當 key 過期後,會被自動刪除
ttl key 返回 key 的剩餘過期時間
如圖:創建一個 color 鍵,指定它的過期時間爲10s,10s後自動刪除, - 2表示已過期 2s,此時 color 鍵已經被刪除
12、 select index 切換數據庫,redis 共有16個數據庫,索引值爲 0 - 15,默認使用 db-0 數據庫,超出會報錯
13、move key index 將 key 從當前數據庫移動到指定數據庫
14、 flushdb 刪除當前數據庫中所有的 key
flushall 刪除所有數據庫中所有的 key
15、append key value 給指定的 key 追加 value(原 value 會被保留)
16、substr key start end 對指定的 key 值進行截取,返回截取過的 value (對 key - value 沒有影響)
三、 redis數據類型——list列表類型
1、list 類型其實就是一個雙向鏈表,通過 push,pop 操作,從鏈表的頭部或者尾部添加或刪除元素,這使得 list 既可以用作棧,也可以用作隊列
2、lpush 、rpush 、lrange
lpush key value :向鏈表的頭部放入數據 rpush key value :向鏈表的尾部放入數據
lrange key start stop :獲取列表的信息, 0 -1 表示獲取該 list 的全部信息
3、lpop 、rpop
lpop key :在鏈表的左側彈出第一個數據(彈出鏈表的頭部數據)
rpop key :在鏈表的右側彈出最後一個數據(彈出鏈表的尾部數據)
、
4、llen key :返回 key 對應的 list 的長度,若 key 不存在則返回 0,若 key 對應的數據類型不是 list 返回錯誤
5、ltrim key start stop :截取 list ,保留指定區間內的元素,其餘元素刪除
四、redis數據類型——set集合類型
1、redis 裏面的 set 集合類型是 string 類型的無序集合,被稱爲無序集合類型
2、集合的三個特點:無序性、唯一性、確定性
3、sadd key member :添加一個 string 元素到 key 對應的 set 集合中,若添加成功則返回 1,若該元素已存在,則添加失敗,返回 0
4、smembers key :獲取集合裏面的元素
5、srem key member :移除集合中的某個元素,移除成功返回 1
6、spop key :隨機移除集合中的某個元素,並返回刪除的元素
7、sismember key member: 判斷元素是否存在集合中,存在返回 1,不存在返回 0
8、scard key :返回集合中元素個數
9、smove key1 key2 member:將集合1中的指定元素移除給集合2,成功則返回 1
10、集合運算:
sinter key1 key 2 求交集
sunion key1 key2 求並集
sdiff key1 key2 求差集
11、實例應用: redis 裏面的集合一般用於社交類型的網站的好友關係展示,如:好友推薦,顯示共同好友等
①首先設置四個用戶:aaa、bbb、ccc、ddd 以及他們的郵箱信息
②設置好友集合: 設定 03 號與 01、02 號爲好友,04 號與 02 號爲好友
③求出好友關係:
求 03 號與 04 號的共同好友(交集):
求 03 號 與 04 號的全部好友(並集):
通過 03 號向 04 號推薦好友(差集):
五、redis數據類型——zset集合類型(sorted set)
1、與 set 一樣,zset 也是 string 類型元素的集合,不同的是,set 集合中的元素是無序的,而在 zset 集合中,每個元素都會關聯一個權,通過權值可以有序的獲取集合中的元素,所以 zset 被稱爲有序集合
2、可以利用 zset 的特點,根據回覆量,獲取熱門信息
3、zadd key 權 member :向集合中添加元素,並設置權重
4、zrange key start stop :返回指定區間的元素,按照權重,升序排列
5、zrevrange key start stop :返回指定區間的元素,按照權重,降序排列
6、zremrangebyrank key start stop : 刪除指定區間的元素(按權值大小升序排列,然後刪除指定區間的元素)
7、zrank key member :返回指定元素在集合中的索引值,集合中元素按照權重,升序排列
將上一步操作刪除的元素添加上,並重新賦予權值
8、zrevrank key member :返回指定元素在集合中的索引值,集合中的元素按照權重,降序排列
9、zcard key :返回集合中的元素個數
10、zscore key member : 返回指定元素的權重值
11、zrange key start stop withscores :返回指定區間的元素以及他們的權重值
12、zincrby key increment member :按照 increment 幅度,增加對應的 member 的權值,並返回增加後的新權值
13、zrem key member :刪除指定元素,刪除成功返回 1,刪除失敗(元素不存在)返回 0
六、redis數據類型——hash類型
1、redis 裏面的 hash 是一個 string 類型的 field 和 value 的映射表,特別適合用於存儲對象
儲存格式類似於: key = array ( " field " => " value " )
2、hset key field value :設置單個值
hget key field :獲取單個值
3、hmset key field1 value1 field2 value2 ....... :設置多個值,使用空格隔開
hgetall key :獲取 key 中全部的 hash 數據
hmget key field1 field2 ..... :獲取多個值
4、hkeys key :獲取 key 中全部的 field
5、hvals key :獲取 key 中全部的 value
6、hlen key :獲取 kes 中 field 的數量
7、hdel key field :刪除指定的 field,對應的 value 也會被刪除,刪除成功返回 1
8、hexists key field :判斷 key 對應的 field 是否存在,存在返回 1 ,不存在返回 0
9、hincrby key field increment :給指定的字段的整數值,加上增量 increment,若指定增加的字段不是整數型,會報錯
七、python 與 redis 交互
運行結果: