若是在一臺電腦上, 想開發多個不一樣的項目, 須要用到同一個包的不一樣版本, 若是使用上面的命令, 在同一個目錄下安裝或者更新, 新版本會覆蓋之前的版本, 其它的項目就沒法運行了.而公司裏面每每會存在多個項目的狀況,因此須要使用虛擬環境,把當前項目所須要用到的模塊及其版本進行隔離包裝到一個虛擬環境中使用。css
1 安裝前端
pip install virtualenv pip install virtualenv-clone pip install virtualenvwrapper pip install virtualenvwrapper-win # 注意以上命令適用於window系統
建立虛擬環境: mkvirtualenv 虛擬環境名稱 建立虛擬環境(指定python版本): mkvirtualenv -p python 虛擬環境名稱 查看全部虛擬環境: workon+2次tab鍵 使用虛擬環境: workon 虛擬環境名稱 退出虛擬環境: deactivate 刪除虛擬環境(必須先退出虛擬環境內部才能刪除當前虛擬環境): rmvirtualenv 虛擬環境名稱 其餘相關命令: 查看虛擬環境中安裝的包: pip freeze 或者 pip list 收集當前環境中安裝的包及其版本: pip freeze > requirements.txt 在部署項目的服務器中安裝項目使用的模塊: pip install -r requirements.txt 提示: 虛擬環境只會管理環境內部的模塊和python解析器,對於源代碼是毫無關係 建立虛擬環境須要聯網 建立成功後, 會自動工做在這個虛擬環境上 工做在虛擬環境上, 提示符最前面會出現 「(虛擬環境名稱)」
企業的web項目類型: 商城 門戶網站[企業站和門戶站] 社交網絡 資訊論壇 內部系統 我的博客 內容收費站 前端的靜態頁面製做,外界開發的時候,是照着psd/png設計稿進行切圖佈局
首頁 導航信息/輪播圖片/購物車/登陸判斷 免費課 課程分類/篩選條件/ 免費課詳情頁 視頻播放/課程章節/學生評論/倒計時/添加商品到購物車/ 登陸 帳號登陸 多條件登陸 極驗驗證碼接口 忘記密碼 保存密碼 短信登陸 發送短信接口[ 容聯雲短信接口 ] 短信冷卻倒計時 免費試學 購物車 購物車中課程的關聯和核算功能 優惠券管理 個人貝里[積分] 支付寶功能的接入 生成訂單[訂單號\訂單價格\訂單商品標題] 購買成功頁面 從支付寶服務器上面獲取訂單狀態 後臺管理 xadmin
項目採用先後端分離的應用模式 前端使用Vue.js vue-cli 後端使用Django REST framework
三 搭建DRF項目vue
workon luffy
在以前虛擬環境luffy中安裝項目須要用到的類庫 pip install django pip install PymySQL pip install Pillow pip install djangorestframework
django-admin startproject luffy
效果:java
提示: 在pycharm中若是要使用已經建立好的虛擬環境,則必須設置pycharm中的python解釋器,設置爲 虛擬環境中的python。 /.virtualenvs/環境名稱/Scripts/python.exe
訪問瀏覽器查看效果:python
四. 項目配置mysql
├── docs # 項目相關資料保存目錄 ├── logs # 項目運行時/開發時日誌目錄 ├── manage.py ├── luffy # 開發時的代碼保存 │ ├── apps # 開發者的代碼保存目錄,以模塊[子應用]爲目錄保存 │ ├── libs # 第三方類庫的保存目錄 │ ├── settings.py │ ├── urls.py │ ├── utils # 多個模塊[子應用]的公共函數類庫 └── scripts # 保存項目運營時的腳本文件
create database luffycity default charset=utf8; 爲當前項目建立數據庫用戶[這個用戶只能看到這個數據庫] create user moluo identified by '123456'; grant all privileges on luffycity.* to 'moluo'@'%'; flush privileges;
#1 打開settings/dev.py文件,並配置 DATABASES = { "default": { "ENGINE": "django.db.backends.mysql", "HOST": "127.0.0.1", "PORT": 3306, "USER": "luffy_user", "PASSWORD": "luffy", "NAME": "luffycity", } } #2 在項目主模塊的 __init__.py中導入pymysql import pymysql pymysql.install_as_MySQLdb()
在settings.py文件中追加以下配置:linux
LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'formatters': { 'verbose': { 'format': '%(levelname)s %(asctime)s %(module)s %(lineno)d %(message)s' }, 'simple': { 'format': '%(levelname)s %(module)s %(lineno)d %(message)s' }, }, 'filters': { 'require_debug_true': { '()': 'django.utils.log.RequireDebugTrue', }, }, 'handlers': { 'console': { 'level': 'DEBUG', 'filters': ['require_debug_true'], 'class': 'logging.StreamHandler', 'formatter': 'simple' }, 'file': { 'level': 'INFO', 'class': 'logging.handlers.RotatingFileHandler', 'filename': os.path.join(os.path.dirname(BASE_DIR), "logs/luffy.log"), 'maxBytes': 300 * 1024 * 1024, 'backupCount': 10, 'formatter': 'verbose' }, }, 'loggers': { 'django': { 'handlers': ['console', 'file'], 'propagate': True, }, } }
新建utils/exceptions.pywebpack
from rest_framework.views import exception_handler from django.db import DatabaseError from rest_framework.response import Response from rest_framework import status import logging logger = logging.getLogger('luffy') def custom_exception_handler(exc, context): """ 自定義異常處理 :param exc: 異常類 :param context: 拋出異常的上下文 :return: Response響應對象 """ # 調用drf框架原生的異常處理方法 response = exception_handler(exc, context) if response is None: view = context['view'] if isinstance(exc, DatabaseError): # 數據庫異常 logger.error('[%s] %s' % (view, exc)) response = Response({'message': '服務器內部錯誤'}, status=status.HTTP_507_INSUFFICIENT_STORAGE) return response #settings.py配置文件中添加 REST_FRAMEWORK = { ... # 異常處理 'EXCEPTION_HANDLER': 'luffy.utils.exceptions.custom_exception_handler', }
問題出現的緣由: 當前系統中,登陸用戶的家目錄是中文的!ios
防範相似的問題出現: 安裝的軟件\項目開發使用到的路徑\開發相關的目錄不要涉及到中文git
解決方案:1. 在當前電腦中,配置環境變量中添加一個配置虛擬環境存儲目錄的變量
2 數據建立的帳號沒法登錄,原來的root帳號沒有問題,建立帳號的sql語句沒有問題.
錯誤發生的緣由: 在安裝mysql的時候,沒有進行初始化[沒有刪除匿名用戶]
防範出現這個問題: 之後安裝了mysql之後,進入到mysql的控制檯,找到mysql數據庫的user表,把user=''的用戶刪除
delete from mysql.user where user='' 注意,若是在刪除匿名用戶以前已經建立的用戶,這些用戶是沒法登錄,這些用戶也須要刪除 刪除了用戶之後,還要從權限中移除上面帳號的相關權限記錄 drop user '沒法登錄的用戶名'; # 匿名用戶無需進行這項操做 flush privileges; # 刷新mysql的權限記錄,保證上面更改立馬刷新 解決方案: 同上面的防範措施一致.
使用代碼版本控制[version control]軟件, 目前市面上比較流行的代碼版本控制器有: git,svn,csv
本項目使用git管理項目代碼,代碼庫放在gitee碼雲平臺。(注意,公司中一般放在gitlab私有服務器中) 1 Git 的誕生: 2005 年 4 月3 日,Git 是目前世界上最早進的分佈式版本控制系統(沒有之一) 做用:源代碼管理 爲何要進行源代碼管理? 方便多人協同開發 方便版本控制
SVN 都是集中控制管理的,也就是有一箇中央服務器,你們都把代碼提交到中央服務器,而 git 是分佈式的版本控制工具,也就是說沒有中央服務器,每一個節點的地位平等。
SVN
Git
官網地址:
下載到本地磁盤
安裝
一路【next】就能夠了
注意:openssl 必定選它
安裝完成後,右擊菜單欄,有以下菜單,表示安裝完成
進入git bash選項
Git工做區、暫存區和版本庫
就是在你本要電腦磁盤上能看到的目錄。
通常存放在【.git】目錄下的index文件(.git/index) 中,因此咱們把暫存區有時也叫做索引。
工做區有一個隱藏目錄.git,這個不算工做區,而是Git的版本庫。git中的head/master是分支,是版本庫。
cd進入到本身但願存儲代碼的目錄路徑,並建立本地倉庫.git 新建立的本地倉庫.git是個空倉庫 cd 目錄路徑 git init 建立倉庫
git config --global user.name 'lisi' git config --global user.email 'lisi@163.com'
git status git status –s 簡約顯示 紅色表示新建文件或者新修改的文件,都在工做區. 綠色表示文件在暫存區 新建的login.py文件在工做區,須要添加到暫存區並提交到倉庫區 上圖表示: 暫時沒有新文件須要提交到暫存區
# 添加項目中全部文件 git add . 或者 # 添加指定文件 git add login.py 例如: 建立3個文件 ,並查看狀態.
git commit -am "版本描述"
手動操做刪除 或者 在命令行下 使用 rm 文件名 刪除 都是表示在工做區刪除. 對於這種刪除,若是還原,則可使用 git checkout 文件名
版本刪除
若是使用 git rm 文件名, 這種操做屬於暫存區刪除,這種刪除沒法直接git checkout 文件名 來還原. 若是直接執行git checkout 命令,則報錯以下: 若是要還原在暫存區中刪除的文件,必須先執行 git reset head
git log 或者 git reflog 過濾查看日誌 git log –p 退出按【q】鍵 ctrl+f向下分頁 ctrl+b 向上分頁 顯示指定日期以後的日誌 git log --after '2018-11-6' 顯示指定日期以前的日誌 git log --before '2018-11-6' 指定顯示指定開發者的日誌 git log --author 'lisi'
回退版本
方案一:
HEAD表示當前最新版本 HEAD^表示當前最新版本的前一個版本 HEAD^^表示當前最新版本的前兩個版本,以此類推... HEAD~1表示當前最新版本的前一個版本 HEAD~10表示當前最新版本的前10個版本,以此類推... git reset --hard HEAD^
方案二:當版本很是多時可選擇的方案
經過每一個版本的版本號回退到指定版本 git reset --hard 版本號 取消暫存 git reset head git reset <file> :從暫存區恢復到工做文件 git reset -- :從暫存區恢復到工做文件
針對與文件所處的不一樣分區,文件所處的狀態: (1)未追蹤, 文件第一次出如今工做區, 版本庫尚未存儲該文件的狀態 (2)已追蹤, 只要第一次,git add了文件, 文件就是已追蹤 (3)未修改, 文件在工做區未被編輯 (4)已修改, 文件在工做區被修改 (5)未暫存, 文件已修改, 可是沒有add到暫存區 (6)已暫存, 已經將修改的文件add到暫存區 (7)未提交, 已暫存的文件, 沒有commit提交. 處於暫存區 (8)已提交, 提交到版本庫的文件修改,只有commit之後纔會有倉庫的版本號生成 注意: 公司通常使用git管理項目,每每會搭建一個gitlab本身內部管理代碼,也有公司選擇使用碼雲的企業版倉庫來管理 使用git開發項目時,有時候不必定經過https協議提交代碼的。也有的公司是經過ssh協議提交,此時須要生成ssh公鑰和提交公鑰給倉庫。[碼雲這些官網都會有詳細的提示說明] 生成SSH公鑰【必須安裝git bash纔可使用這個命令,並且還要把git bash添加到系統變量裏面】 ssh-keygen -t rsa -C "lisi@163.com" 參考:https://gitee.com/help/articles/4180
1) 建立私有項目庫
建立私有空倉庫之後的界面:
2)克隆項目到本地
git clone 倉庫地址 注意,若是當前目錄下出現git倉庫同名目錄時,會克隆失敗。
3)建立並切換分支到dev
# git branch dev # 建立本地分支dev,dev是自定義 # git checkout dev # 切換本地分支代碼 git checkout -b dev # 這裏是上面兩句代碼的簡寫
git提交
git add 代碼目錄 git status git commit -m '添加項目代碼'
推送到遠端
git push origin dev:dev
若是推送代碼,出現如下提示: git pull ....,則表示當前本地的代碼和線上的代碼版本不一樣.
1. 把線上的代碼執行如下命令,拉取到本地,進行同步 git pull 2. 根據提示,移除多餘的衝突的文件,也能夠刪除. 完成這些步驟之後,再次add,commit,push便可.
cd 項目目錄 vue init webpack lufei
例如,我要把項目保存在D:/moluo的根目錄下,能夠以下操做:
D: cd /moluo vue init webpack lufei
根據須要在生成項目時,咱們選擇對應的選項, 效果:
根據上面的提示,咱們已經把vue項目構建好了,接下來咱們能夠在pycharm編輯器中把項目打開並根據上面黃色提示,運行測試服務器。
打開項目已經,在pycharm的終端下運行vue項目,查看效果。
npm run dev
接下來,咱們根據終端上效果顯示的對應地址來訪問項目(若是有多個vue項目在運行,8080端口被佔據了,服務器會自動改端口,因此根據本身實際在操做中看到的地址來訪問。)
清除默認的HelloWorld組件和APP.vue中的默認樣式
接下來,咱們能夠查看效果了,一張白紙~
npm i vue-router -S
在src目錄下建立routers路由目錄,在routers目錄下建立index.js路由文件
index.js路由文件中,編寫初始化路由對象的代碼 .
import Vue from "vue" import Router from "vue-router" // 這裏導入可讓讓用戶訪問的組件 Vue.use(Router); export default new Router({ // 設置路由模式爲‘history’,去掉默認的# mode: "history", routes:[ // 路由列表 ] })
2 註冊路由信息
打開main.js文件,把router對象註冊到vue中.
代碼:
// The Vue build version to load with the `import` command // (runtime-only or standalone) has been set in webpack.base.conf with an alias. import Vue from 'vue' import App from './App' import router from './routers/index'; Vue.config.productionTip = false /* eslint-disable no-new */ new Vue({ el: '#app', router, components: { App }, template: '<App/>' });
在App.vue組件中,添加顯示路由對應的內容。
代碼:
<template> <div id="app"> <router-view/> </div> </template> <script> export default { name: 'App', components: { } } </script> <style> </style>
npm i element-ui -S 上面的命令等同於 npm install element-ui --save
1) 配置ElementUI到項目中
在main.js中導入ElementUI,並調用。
代碼:
// elementUI 導入 import ElementUI from 'element-ui'; import 'element-ui/lib/theme-chalk/index.css'; // 調用插件 Vue.use(ElementUI);
成功引入了ElementUI之後,接下來咱們就能夠開始進入前端頁面開發,首先是首頁。
接下來咱們把以前完成的首頁,直接拿過來使用[注意除了組件之外,還有靜態文件也須要拿過來,包括App.vue裏面的公共樣式],並運行項目。
咱們如今爲前端和後端分別設置兩個不一樣的域名
window 系統: C:\Windows\System32\drivers\etc\host
linux/mac系統: /etc/hosts
位置 | 域名 |
---|---|
前端 | www.luffycity.cn |
後端 | api.luffycity.cn |
編輯/etc/hosts
文件,能夠設置本地域名
在文件中增長兩條信息
127.0.0.1 api.luffycity.cn 127.0.0.1 www.luffycity.cn
經過瀏覽器訪問drf項目,會出現如下錯誤信息
能夠經過settings的ALLOWED_HOSTS,設置容許訪問
# 設置哪些客戶端能夠經過地址訪問到後端 ALLOWED_HOSTS = [ 'api.luffycity.cn', 'www.luffycity.cn', 'localhost', # 實際開發的時候不會寫上localhost和127.0.0.1的 '127.0.0.1', ]
如今,前端與後端分處不一樣的域名,咱們須要爲後端添加跨域訪問的支持。
不然前端沒法使用axios沒法請求後端提供的api數據
咱們使用CORS來解決後端對跨域訪問的支持。
使用django-cors-headers擴展
在 Response(headers={"Access-Control-Allow-Origin":'客戶端地址/*'})
安裝
pip install django-cors-headers
添加應用
INSTALLED_APPS = ( ... 'corsheaders', ... )
中間層設置【必須寫在第一個位置】
MIDDLEWARE = [ 'corsheaders.middleware.CorsMiddleware', ... ]
添加白名單
# CORS組的配置信息 CORS_ORIGIN_WHITELIST = ( '127.0.0.1:8080', 'localhost:8080', 'www.luffycity.cn:8080' ) CORS_ALLOW_CREDENTIALS = True # 容許ajax跨域請求時攜帶cookie
完成了上面的步驟,咱們就能夠經過後端提供數據給前端使用ajax訪問了。
window系統的redis是微軟團隊根據官方的linux版本高仿的
官方原版: https://redis.io/
中文官網:http://www.redis.cn
下載地址: https://github.com/MicrosoftArchive/redis/releases
使用如下命令啓動redis服務端
redis-server C:/tool/redis/redis.windows.conf
關閉上面這個cmd窗口就關閉redis服務器服務了。
redis做爲windows服務啓動方式
redis-server --service-install redis.windows.conf
啓動服務:redis-server --service-start 中止服務:redis-server --service-stop
啓動內置客戶端鏈接redis服務:
2 redis的使用
redis 安裝成功之後,window下的配置文件保存在軟件 安裝目錄下,若是是mac或者linux,則默認安裝/etc/redis/redis.conf
綁定ip:若是須要遠程訪問,可將此⾏註釋,或綁定⼀個真實ip
bind 127.0.0.1
端⼝,默認爲6379
port 6379
是否以守護進程運⾏[這裏的配置主要是linux和mac下面須要配置的]
若是以守護進程運⾏,則不會在命令⾏阻塞,相似於服務
若是以⾮守護進程運⾏,則當前終端被阻塞
設置爲yes表示守護進程,設置爲no表示⾮守護進程
推薦設置爲yes
daemonize yes
數據⽂件
dbfilename dump.rdb
數據⽂件存儲路徑
dir .
⽇志⽂件
logfile "C:/tool/redis/redis-server.log"
數據庫,默認有16個
database 16
主從複製,相似於雙機備份。
slaveof
Redis 是一個高性能的key-value數據格式的內存緩存,NoSQL數據庫。 NOSQL:not only sql,泛指非關係型數據庫。 關係型數據庫: (mysql, oracle, sql server, sqlite) 1. 數據存放在表中,表之間有關係。 2. 通用的SQL操做語言。 3. 大部分支持事務。 非關係型數據庫[ redis,hadoop,mangoDB]: 1. 沒有數據表的概念,不一樣的nosql數據庫存放數據位置不一樣。 2. nosql數據庫沒有通用的操做語言。 3. 基本不支持事務。 redis支持簡單事務 redis: 內存型(數據存放在內存中)的非關係型(nosql)key-value(鍵值存儲)數據庫, 支持數據的持久化(注: 數據持久化時將數據存放到文件中,每次啓動redis以後會先將文 件中數據加載到內存),常常用來作緩存(用來緩存一些常常用到的數據,提升讀寫速度)。 redis是一款基於CS架構的數據庫,因此redis有客戶端,也有服務端。 其中,客戶端可使用python等編程語言,也能夠終端命令行工具 redis客戶端鏈接服務器: redis-cli -h `redis服務器ip` -p `redis服務器port`
1. string類型: 字符串類型是 Redis 中最爲基礎的數據存儲類型,它在 Redis 中是二進制安全的,也就是byte類型 最大容量是512M。 2. hash類型: hash用於存儲對象,對象的結構爲屬性、值,值的類型爲string。 key:{ 域:值, 域:值, 域:值, 域:值, ... } 3. list類型: 列表的元素類型爲string。 key:[ 值1,值2,值3..... ] 4. set類型: 無序集合,元素爲string類型,元素惟一不重複,沒有修改操做。 5. zset類型: 有序集合,元素爲string類型,元素惟一不重複,沒有修改操做。
若是設置的鍵不存在則爲添加,若是設置的鍵已經存在則修改
設置鍵值
set key value
例1:設置鍵爲name
值爲xiaoming
的數據
set name xiaoming
設置鍵值及過時時間,以秒爲單位
setex key seconds value
例2:設置鍵爲aa
值爲aa
過時時間爲3秒的數據
setex aa 3 aa
關於設置保存數據的有效期
# setex 添加保存數據到redis,同時設置有效期 格式: setex key time value # expire 給已有的數據從新設置有效期 格式: expire key time
設置多個鍵值
mset key1 value1 key2 value2 ...
例3:設置鍵爲a1
值爲python
、鍵爲a2
值爲java
、鍵爲a3
值爲c
mset a1 python a2 java a3 c
追加值
append key value
例4:向鍵爲a1
中追加值haha
append a1 haha
獲取:根據鍵獲取值,若是不存在此鍵則返回nil
get key
例5:獲取鍵name
的值
get name
根據多個鍵獲取多個值
mget key1 key2 ...
例6:獲取鍵a一、a二、a3
的值
mget a1 a2 a3
查找鍵,參數⽀持正則表達式
keys pattern
例1:查看全部鍵
keys *
例2:查看名稱中包含a
的鍵
keys a*
判斷鍵是否存在,若是存在返回1
,不存在返回0
exists key1
例3:判斷鍵a1
是否存在
exists a1
查看鍵對應的value
的類型
type key
例4:查看鍵a1
的值類型,爲redis⽀持的五種類型中的⼀種
type a1
刪除鍵及對應的值
del key1 key2 ...
例5:刪除鍵a二、a3
del a2 a3
設置過時時間,以秒爲單位
若是沒有指定過時時間則⼀直存在,直到使⽤DEL
移除
expire key seconds
例6:設置鍵a1
的過時時間爲3秒
expire a1 3
查看有效時間,以秒爲單位
ttl key
例7:查看鍵bb
的有效時間
ttl bb
設置單個屬性
hset key field value
例1:設置鍵 user
的屬性name
爲xiaohong
hset user name xiaohong
設置多個屬性
hmset key field1 value1 field2 value2 ...
例2:設置鍵u2
的屬性name
爲xiaohong
、屬性age
爲11
hmset u2 name xiaohongage 11
獲取指定鍵全部的屬性
hkeys key
例3:獲取鍵u2的全部屬性
hkeys u2
獲取⼀個屬性的值
hget key field
例4:獲取鍵u2
屬性name
的值
hget u2 name
獲取多個屬性的值
hmget key field1 field2 ...
例5:獲取鍵u2
屬性name
、age
的值
hmget u2 name age
獲取全部屬性的值
hvals key
例6:獲取鍵u2
全部屬性的值
hvals u2
刪除屬性,屬性對應的值會被⼀起刪除
hdel key field1 field2 ...
例7:刪除鍵u2
的屬性age
hdel u2 age
列表的元素類型爲string
按照插⼊順序排序
在左側插⼊數據
lpush key value1 value2 ...
例1:從鍵爲a1
的列表左側加⼊數據a 、 b 、c
lpush a1 a b c
在右側插⼊數據
rpush key value1 value2 ...
例2:從鍵爲a1
的列表右側加⼊數據0、1
rpush a1 0 1
在指定元素的前或後插⼊新元素
linsert key before或after 現有元素 新元素
例3:在鍵爲a1
的列表中元素b
前加⼊3
linsert a1 before b 3
設置指定索引位置的元素值
索引從左側開始,第⼀個元素爲0
索引能夠是負數,表示尾部開始計數,如-1
表示最後⼀個元素
lset key index value
例5:修改鍵爲a1
的列表中下標爲1
的元素值爲z
lset a 1 z
刪除指定元素
將列表中前count
次出現的值爲value
的元素移除
count > 0: 從頭往尾移除
count < 0: 從尾往頭移除
count = 0: 移除全部
lrem key count value
例6.1:向列表a2
中加⼊元素a、b、a、b、a、b
lpush a2 a b a b a b
例6.2:從a2
列表右側開始刪除2個b
lrem a2 -2 b
例6.3:查看列表a2
的全部元素
lrange a2 0 -1
添加元素
sadd key member1 member2 ...
例1:向鍵a3
的集合中添加元素zhangsan
、lisi
、wangwu
sadd a3 zhangsan sili wangwu
返回全部的元素
smembers key
例2:獲取鍵a3
的集合中全部元素
smembers a3
刪除指定元素
srem key
例3:刪除鍵a3
的集合中元素wangwu
srem a3 wangwu
中文官網: http://www.redis.cn/
英文官網:https://redis.io
參考命令:http://doc.redisfans.com/
針對redis中的內容擴展
flushall 清空當前數據庫中的全部數據
針對各類數據類型它們的特性,使用場景以下:
字符串string: 用於保存一些項目中的普通數據,只要鍵值對的均可以保存,例如,保存 session,定時記錄狀態
哈希hash:用於保存項目中的一些字典數據,可是不能保存多維的字典,例如,商城的購物車
列表list:用於保存項目中的列表數據,可是也不能保存多維的列表,例如,隊列,秒殺,醫院的掛號
無序集合set:用於保存項目中的一些不能重複的數據,能夠用於過濾,例如,投票海選的時候,過濾候選人
有序集合zset:用於保存項目中一些不能重複,可是須要進行排序的數據,分數排行榜.