Redis
redis是一個key-value儲存系統。和Memcached類似,它支援儲存的value型別相對更多,包括string(字串)、list(連結串列)、set(集合)、zset(sorted set --有序集合)和hash(雜湊型別)。這些資料型別都支援push/pop、add/remove及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支援各種不同方式的排序。與memcached一樣,為了保證效率,資料都是快取在記憶體中。區別的是redis會週期性的把更新的資料寫入磁碟或者把修改操作寫入追加的記錄檔案,並且在此基礎上實現了master-slave(主從)同步。
在Linux安裝Redis(cd /opt)
yum安裝redis
1.yum安裝
#前提得配置好阿里雲yum源,epel源 #檢視是否有redis包 yum list redis #安裝redis yum install redis -y #安裝好,啟動redis systemctl start redis
檢查redis是否工作
redis-cli #redis 客戶端工具 #進入互動式環境後,執行ping,返回pong表示安裝成功 127.0.0.1:6379> ping PONG
通過原始碼包編譯安裝redis
wget http://download.redis.io/releases/redis-4.0.10.tar.gz
2.解壓redis
tar -zxf redis-4.0.10.tar.gz
3.解壓完成之後,進入redis原始碼編譯安裝
make && make install
4.指定配置檔案啟動redis
vim /opt/redis-4.0.10/redis.conf 1.更改bind引數,讓redis可以遠端訪問 bind 0.0.0.0 2.更改redis的預設埠 port 6380 3.使用redis的密碼進行登入 requirepass 登入redis的密碼 4.指定配置檔案啟動 redis-server redis.conf
5.通過新的埠和密碼登入redis
redis-cli -p 6380
登入後
auth 密碼
redis還支援互動式的引數,登入資料庫
redis-cli -p 6380 -a redis的密碼 (這個不太安全)
6.通過登入redis,用命令檢視redis的密碼config set requirepass 新的密碼 #設定新密碼
config get requirepass #獲取當前的密碼
過濾出檔案的空白行和註釋行
grep -v "^#" redis.conf | grep -v "^$"
redis的可執行檔案
https://images2018.cnblogs.com/blog/1132884/201807/1132884-20180725122753794-1978331159.png
python操作redis
#!/usr/bin/env python # -*- coding:utf8 -*- import redis r = redis.Redis(host='192.168.11.122',password='123123',port=6379) r.set('foo', 'Bar') print (r.get('foo'))
執行緒池操作redis
''' redis-py 使用connection pool 來管理對一個redis server的所有連線,避免每次建立,釋放連線的開銷 預設 每個redis例項都會維護一個自己的連結池,然後作為引數redis,這樣就可以實現多個redis 例項共享一個連線池 ''' import redis pool = redis.ConnectionPool(host='192.168.11.122',password='123123',port=6379) r = redis.Redis(connection_pool=pool) r.set('name','Yu chao') print(r.get('name'))
redis資料結構
redis是一種高階的key:value儲存系統,其中value支援五種資料型別 字串(strings) 雜湊(hashes) 列表(lists) 集合(sets) 有序集合(sorted sets)
資料結構示例
1.strings型別
- set 設定key
- get 獲取key
- append 追加string
- mset 設定多個鍵值對
- mget 獲取多個鍵值對
- del 刪除key
- incr 遞增+1
- decr 遞減-1
127.0.0.1:6379> set name 'yu' #設定key OK 127.0.0.1:6379> get name #獲取value "yu" 127.0.0.1:6379> set name 'yuchao' #覆蓋key OK 127.0.0.1:6379> get name #獲取value "yuchao" 127.0.0.1:6379> append name ' dsb' #追加key的string (integer) 10 127.0.0.1:6379> get name #獲取value "yuchao dsb" 127.0.0.1:6379> mset user1 'alex' user2 'xiaopeiqi' #設定多個鍵值對 OK 127.0.0.1:6379> get user1 #獲取value "alex" 127.0.0.1:6379> get user2 #獲取value "xiaopeiqi" 127.0.0.1:6379> keys * #找到所有key 1) "user2" 2) "name" 3) "user1" 127.0.0.1:6379> mget user1 user2 name #獲取多個value 1) "alex" 2) "xiaopeiqi" 3) "yuchao dsb" 127.0.0.1:6379> del name #刪除key (integer) 1 127.0.0.1:6379> get name #獲取不存在的value,為nil (nil) 127.0.0.1:6379> set num 10 #string型別實際上不僅僅包括字串型別,還包括整型,浮點型。redis可對整個字串或字串一部分進行操作,而對於整型/浮點型可進行自增、自減操作。 OK 127.0.0.1:6379> get num "10" 127.0.0.1:6379> incr num #給num string 加一 INCR 命令將字串值解析成整型,將其加一,最後將結果儲存為新的字串值,可以用作計數器 (integer) 11 127.0.0.1:6379> get num "11" 127.0.0.1:6379> decr num #遞減1 (integer) 10 127.0.0.1:6379> decr num #遞減1 (integer) 9 127.0.0.1:6379> get num "9"
2.list型別
- lpush 從列表左邊插
- rpush 從列表右邊插
- lrange 獲取一定長度的元素 lrange key start stop
- ltrim 擷取一定長度列表
- lpop 刪除最左邊一個元素
- rpop 刪除最右邊一個元素
- lpushx/rpushx key存在則新增值,不存在不處理
lpush duilie 'alex' 'peiqi' 'ritian' #新建一個duilie,從左邊放入三個元素 llen duilie #檢視duilie長度 lrange duilie 0 -1 #檢視duilie所有元素 rpush duilie 'chaoge' #從右邊插入chaoge lpushx duilie2 'dsb' #key存在則新增 dsb元素,key不存在則不作處理 ltrim duilie 0 2 #擷取佇列的值,從索引0取到2,刪除其餘的元素 lpop #刪除左邊的第一個 rpop #刪除右邊的第一個
3.sets集合型別
redis的集合,是一種無序的集合,集合中的元素沒有先後順序。
集合相關的操作也很豐富,如新增新元素、刪除已有元素、取交集、取並集、取差集等。我們來看例子:
- sadd/srem 新增/刪除 元素
- sismember 判斷是否為set的一個元素
- smembers 返回集合所有的成員
- sdiff 返回一個集合和其他集合的差異
- sinter 返回幾個集合的交集
- sunion 返回幾個集合的並集
sadd zoo wupeiqi yuanhao #新增集合,有三個元素,不加引號就當做字串處理 smembers zoo #檢視集合zoo成員 srem zoo wupeiqi #刪除zoo裡面的alex sismember zoo wupeiqi #返回改是否是zoo的成員資訊,不存在返回0,存在返回1 sadd zoo wupeiqi #再把wupeiqi加入zoo smembers zoo #檢視zoo成員 sadd zoo2 wupeiqi mjj #新增新集合zoo2 sdiff zoo zoo2 #找出集合zoo中有的,而zoo2中沒有的元素 sdiff zoo2 zoo #找出zoo2中有,而zoo沒有的元素 sinter zoo zoo1 #找出zoo和zoo1的交集,都有的元素 sunion zoo zoo1 #找出zoo和zoo1的並集,所有的不重複的元素
4.雜湊資料結構
hashes即雜湊。雜湊是從redis-2.0.0版本之後才有的資料結構。
hashes存的是字串和字串值之間的對映,比如一個使用者要儲存其全名、姓氏、年齡等等,就很適合使用雜湊。
- hset 設定雜湊值
- hget 獲取雜湊值
- hmset 設定多對雜湊值
- hmget 獲取多對雜湊值
- hsetnx 如果雜湊已經存在,則不設定(防止覆蓋key)
- hkeys 返回所有keys
- hvals 返回所有values
- hlen 返回雜湊包含域(field)的數量
- hdel 刪除雜湊指定的域(field)
- hexists 判斷是否存在
redis hash是一個string型別的field和value的對映表 語法 hset key field value hset news:1 title "first news title" #設定第一條新聞 news的id為1,新增資料title的值是"first news title" hset news:1 content "news content" #新增一個conntent內容 hget news:1 title #獲取news:1的標題 hget news:1 content #獲取news的內容 hmget news:1 title content #獲取多對news:1的 值 hmset news:2 title "second news title" content "second Contents2" #設定第二條新聞news:2 多個field hmget news:2 title content #獲取news:2的多個值 hkeys news:1 #獲取新聞news:1的所有key hvals news:1 #獲取新聞news:1的所有值 hlen news:1 #獲取新聞news:1的長度 hdel news:1 title #刪除新聞news:1的title hlen news:1 #看下新聞news:1的長度 hexists news:1 title #判斷新聞1中是否有title,不存在返回0,存在返回1