生活随笔
收集整理的這篇文章主要介紹了
redis(nosql数据库)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
概述 redis是一種nosql數據庫,他的數據是保存在內存中,同時redis可以定時把內存數據同步到磁盤,即可以將數據持久化,并且他比memcached支持更多的數據結構(string,list列表[隊列和棧],set[集合],sorted set[有序集合],hash(hash表))。用于數據不是很重要,變化快的。相關參考文檔:http://redisdoc.com/index.html redis使用場景: 登錄會話存儲:存儲在redis中,與memcached相比,數據不會丟失。排行榜/計數器:比如一些秀場類的項目,經常會有一些前多少名的主播排名。還有一些文章閱讀量的技術,或者新浪微博的點贊數等。作為消息隊列:比如celery就是使用redis作為中間人。當前在線人數:還是之前的秀場例子,會顯示當前系統有多少在線人數。一些常用的數據緩存:比如我們的BBS論壇,板塊不會經常變化的,但是每次訪問首頁都要從mysql中獲取,可以在redis中緩存起來,不用每次請求數據庫。把前200篇文章緩存或者評論緩存:一般用戶瀏覽網站,只會瀏覽前面一部分文章或者評論,那么可以把前面200篇文章和對應的評論緩存起來。用戶訪問超過的,就訪問數據庫,并且以后文章超過200篇,則把之前的文章刪除。好友關系:微博的好友關系使用redis實現。發布和訂閱功能:可以用來做聊天軟件。 redis和memcached的比較: | ? | memcached | redis |
| 類型 | 純內存數據庫 | 內存磁盤同步數據庫 |
| 數據類型 | 在定義value時就要固定數據類型 | 不需要 |
| 虛擬內存 | 不支持 | 支持 |
| 過期策略 | 支持 | 支持 |
| 存儲數據安全 | 不支持 | 可以將數據同步到dump.rdb中 |
| 災難恢復 | 不支持 | 可以將磁盤中的數據恢復到內存中 |
| 分布式 | 支持 | 主從同步 |
| 訂閱與發布 | 不支持 | 支持 |
redis安裝啟動 1.安裝:centos7 wget http://download.redis.io/releases/redis-5.0.0.tar.gz tar -zxvf redis-5.0.0.tar.gz cd redis-5.0.0 yum install gcc yum install gcc-c++ make? &&? make install cp src/redis-server /usr/bin/ cp src/redis-cli /usr/bin/ 對文件備份 cp redis.conf redis.conf.bak?? (可省)
mv redis.conf?? /etc/redis.conf vim /etc/redis.conf???? daemonize? yes?? (守護進程) 啟動: redis-server /etc/redis.conf 登錄: redis-cli -p 63+79 -h 127.0.0.1??? 默認端口號6379
設置鍵值 設置 將字符串值value關聯到key。如果key已經持有其他值,set命令就
覆寫舊值,無視其類型。并且默認的過期時間是永久,即永遠不會過期。鍵值對,一 一對應。 | 添加 | set key value |
| 刪除 | del key |
| 取值 | get key |
| 查看當前redis所有的key | keys?? * |
設置鍵值對的過期時間 | 設置過期時間(已存在鍵值) | expire key timeout(單位為秒) |
| 在設置值的時候,一同指定過期時間 | set key value EX timeout setex key timeout value |
| 查看過期時間 | ttl key |
hash,哈希操作 將哈希表key中的域field的值設為value。
field 和value 相當于之前的鍵值對,key為一個大的范圍 如果key不存在,一個新的哈希表被創建并進行 HSET操作。如果域 field已經存在于哈希表中,舊值將被覆蓋。(可以理解為學校里的班級中的)
| 添加一個新值 | hset key field value |
| 刪除field中的某個field | hdel key field |
| 獲取哈希中的field對應的值 | hget key field |
| 獲取某個哈希中所有的field | hkeys key |
| 獲取某個哈希中所有的值 | hvals key |
| 獲取某個哈希中所有的field和value | hgetall key |
| 獲取哈希中總共的鍵值對(總共的字段) | hlen key |
| 判斷哈希中是否存在某個field | hexists key field |
列表(list)操作? (可以存儲重復值) | 在列表左邊添加元素:將值value插入到列表key的表頭。 如果key不存在,一個空列表會被創建并執行lpush操作。當key存在但不是列表類型時,將返回一個錯誤。 | lpush key value |
| 在列表右邊添加元素:將值value插入到列表key的表尾。 如果key不存在,一個空列表會被創建并執行RPUSH操作。當key存在但不是列表類型時,返回一個錯誤。 | rpush key value |
| 查看列表中的元素: 返回列表key中指定區間內的元素,區間以偏移量start和stop指定,如果要左邊的第一個到最后的一個? 0? -1 (在計算機中意味著一個循環) 從左往右數序號是從零開始數的 從右往左數序號是從-1 -2 -3 這樣數的 | ? lrange key start stop |
| 指定返回第幾個元素:指定取值 | lindex key index |
| 獲取列表中的元素個數: | llen key |
| 移除并返回列表key的頭元素:從左往右取 | ? lpop key |
| 移除并返回列表的尾元素:從右往左取 | rpop key |
| 刪除指定的元素: | lrem key count value |
根據count 的值,刪除列表中相應個數的value的元素,count的值可以是以下幾種: count > 0:從表頭開始向表尾搜索,移除與value相等的元素,數量為count。 count < 0:從表尾開始向表頭搜索,移除與 value相等的元素,數量為count的絕對值。 count = 0:移除表中所有與value 相等的值。 set集合(集合沒有重復值)的操作 | 添加元素 | sadd set value1 value2.... |
| 查看元素 | smembers set |
| 移除元素 | ? srem set member... |
| 查看集合中的元素個數 | scard set |
| 獲取多個集合的交集 | ? sinter set1 set2 |
| 獲取多個集合的并集 | sunion set1 set2 |
| 獲取多個集合的差集 (以最左側的set集合為基礎進行的差集) | sdiff set1 set2 |
事務操作:Redis事務可以一次執行多個命令,事務具有以下特征: - 隔離操作:事務中的所有命令都會序列化、按順序地執行,不會被其他命令打擾。
- 原子操作:事務中的命令要么全部被執行,要么全部都不執行。
| 開啟一個事務:以后執行的所有命令,都在這個事務中執行的。 | multi |
| 執行事務:會將在multi和exec中的操作一并提交 | exec |
| 取消事務:回滾:會將multi后的所有命令取消。 | discard |
| 監視一個或者多個key:監視一個(或多個)key,如果在事務執行之前這個(或這些) key被其他命令所改動,那么事務將被打斷。 | watch key... |
| 取消所有key的監視: | unwatch |
發布/訂閱操作: publish channel message subscribe channel 14.持久化 redis提供了兩種數據備份方式,一種是RDB,另外一種是AOF,以下將詳細介紹這兩種備份策略:vim /etc/redis.conf ?? redis搭建主從 1.拷貝一份redis配置文件為slave.conf cp redis.conf slave.conf 2.編輯slave.conf文件
vim slave.conf bind 192.168.7.100? (bind設置為自身ip?? 設置成127.0.0.1不能第三方登錄) slaveof 192.168.7.100 6379??? (從屬于->) port 6380 (端口需不一致) redis-server?? redis.conf?? 啟動主 redis-server?? slave.conf 啟動從
?注:同一臺機器搭建,端口號不能相同,需要更改端口號,不同機器不需要 redis集群 redis集群我這里部署在一個機器上
創建6個redis配置文件 mkdir conf touch 7000.conf 7001.conf 7002.conf 7003.conf 7004.conf 7005.conf vim 7000.conf?? #編輯文件并且把如下內容拷貝進去? 或者cp 7000.conf 700{1..5}.conf (剩下的文件也是如此,把以下端口號及相應的文件修改即可)
port 7000?????? #綁定端口 bind 192.168.254.41? #綁定對外連接提供的ip daemonize yes?????????? #開啟守護進程 pidfile 7000.pid????????? #進程文件名 cluster-enabled yes??? #是否是集群 cluster-config-file 7000_node.conf??? #集群配置文件 cluster-node-timeout 15000???????????? #集群連接超時時間 appendonly yes??????????????????? #數據持久化類型
啟動服務 redis-server 7000.conf redis-server 7001.conf redis-server 7002.conf redis-server 7003.conf redis-server 7004.conf redis-server 7005.conf 注:redis需要的Ruby版本最低是2.2.2,但是CentOS7 yum庫中ruby的版本支持到 2.0.0,可gem 安裝redis需要最低是2.2.2,采用rvm來更新ruby: 安裝RVM(rudy version manage) 1.curl -L get.rvm.io | bash -s stable 2.find / -name rvm -print(此時可能出現問題) 3.如果報錯執行(4,5步)
4.curl -sSL https://rvm.io/mpapis.asc | gpg2 --import - 5.curl -sSL https://rvm.io/pkuczynski.asc | gpg2 --import -
6.出現如下內容代表成功 /usr/local/rvm /usr/local/rvm/src/rvm /usr/local/rvm/src/rvm/bin/rvm /usr/local/rvm/src/rvm/lib/rvm /usr/local/rvm/src/rvm/scripts/rvm /usr/local/rvm/bin/rvm /usr/local/rvm/lib/rvm /usr/local/rvm/scripts/rvm 7.使剛安裝的rvm立即生效 source /usr/local/rvm/scripts/rvm 8.安裝一個ruby版本 rvm install 2.4.1 9.使用一個ruby版本 rvm use 2.4.1 10.設置默認ruby版本 rvm use 2.4.1 --default 11.配置集群? (尾部的1 為redis對應的備用機) redis-cli --cluster create 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 127.0.0.1:7007 127.0.0.1:7008 --cluster-replicas 1
?存入的數據時隨機分布在三個主節點上,三個主機數據不互通,當主機死了,備用機 會頂上去,不影響用戶使用,當主機和備用機都死了,集群失敗
轉載于:https://www.cnblogs.com/zgngg/p/10513027.html
總結
以上是生活随笔為你收集整理的redis(nosql数据库)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。