1、win下安裝redisphp
https://github.com/MicrosoftArchive/redis/releases
下載Redis-x64-3.2.100.zip,而後解壓,放到自定義目錄。node
而後打開命令行工具,進入到該目錄下,運行安裝redis服務。mysql
redis-server.exe --service-install redis.windows-service.conf --loglevel verbose
而後就能夠啓動redis服務了git
redis-server --service-start
2、redis可視化工具RedisDesktopManagergithub
https://github.com/uglide/RedisDesktopManager/releases
如今已經難免費了,能夠下載早期版本。redis
3、redis的數據類型sql
一、字符串,最基本的類型,一個key對應一個value。npm
//設置值 set name xiaoxu //獲取值 get name //獲取子字符串,包含開始和結束索引的字符 getrange name 0 -1 getrange name 1 3 //自增長1 set age 1 incr age //指定增長的數量 incrby age 5 //遞減1 decr age //指定遞減的數量 decrby age 3 //刪除指定的鍵 del age //判斷鍵是否存在 exists name //設置過時時間,單位秒 expire name 10 //查看剩餘生存時間 ttl name //獲取鍵的值類型 type name
二、哈希值,是一個鍵值對的集合,一個字符串類型的field和value的映射表,適合存儲對象windows
//設置單個值 hset person name xiao //設置多個值 hmset person age 24 height 172 //獲取單個值 hget person name //獲取多個值 hmget person age height //獲取全部值 hgetall person //刪除鍵 hdel person name //獲取全部的鍵 hkeys person
三、列表,簡單的字符串列表,按插入順序排序。async
//往列表左邊插入 lpush list 1 lpush list 2 //往列表右邊插入 rpush list 3 rpush list 4 //查看列表元素 lrange list 0 -1 //彈出元素 lpop list rpop list //經過索引獲取元素 lindex list 1 //獲取列表的長度 llen list //刪除列表的元素 //lrem key count value // count > 0時,從表頭開始搜索,刪除與value相等的元素,數量爲count // count < 0時,從表尾開始搜索,刪除與value相等的元素,數量爲count絕對值 // count = 0時,刪除列表中全部與value相等的元素 lrem list 1 1 lrem list -1 2
四、集合,是字符串類型的無序集合
//添加元素 sadd label 1 2 3 //查看集合 smembers label //獲取集合個數 scard label //刪除元素 srem label 2 //交集 sadd a 1 2 3 sadd b 2 3 4 sinter a b //差集 sdiff a b //並集 sunion a b
五、有序集合,跟集合同樣也是字符串的集合,不過每一個元素會關聯一個double類型的分數,redis經過該分數給集合中的元素進行從小到大的排序。
//添加有序成員 zadd xiaoxu 60 math 77 english 80 chinaese //獲取有序成員數量 zcard xiaoxu //查看有序集合 zrange xiaoxu 0 -1 //查看有序集合,顯示分數 zrange xiaoxu 0 -1 withscores //刪除有序集合中的成員 zrem xiaoxu math
4、node.js中使用redis
安裝redis庫
npm install redis --save
操做redis的方法與咱們在命令行中輸入的命令基本一致
const redis = require('redis'); //建立一個redis客戶端 let client = redis.createClient(6379, '127.0.0.1'); //操做redis基本跟在命令行操做一致 client.set('name', 'xiaoxu', function (err, result) { if (err) { console.log(err); } console.log(result); }); client.hmset('person', 'name', 'xiaoxu', 'age', '25', function (err, result) { if (err) { console.log(err); } console.log(result); }); client.hmget('person', 'name', 'age', function (err, result) { if (err) { console.log(err); } console.log(result); }); client.hkeys('person', function (err, result) { if (err) { console.log(err); } result.forEach(function (value) { client.hget('person', value, function (err, result) { console.log(value, result); }); }); //退出 client.quit(); });
經過bluebird來包裝redis,讓它支持async,await的方式,解決多層嵌套問題。
const redis = require('redis'); const bluebird = require('bluebird'); //經過bluebird包裝 bluebird.promisifyAll(redis.RedisClient.prototype); bluebird.promisifyAll(redis.Multi.prototype); //建立一個redis客戶端 let client = redis.createClient(6379, '127.0.0.1'); (async function () { //方法名後面都加上Async let result = await client.setAsync('name', 'hehe'); console.log(result); result = await client.hmsetAsync('person', 'name', 'xiaoxu', 'age', '25'); console.log(result); result = await client.hkeysAsync('person'); console.log(result); result.forEach(async function (value) { let v = await client.hgetAsync('person', value); console.log(value, v); }); client.quit(); })();
5、redis發佈與訂閱
redis發佈訂閱是一種消息通訊模式,發送者發送消息,訂閱者接收消息。
const redis = require('redis'); let clientA = redis.createClient(6379, '127.0.0.1'); let clientB = redis.createClient(6379, '127.0.0.1'); //客戶端A訂閱頻道 clientA.subscribe('news'); clientA.subscribe('sports'); //客戶端A監聽消息 clientA.on('message', function (channel, message) { console.log('客戶端A收到', channel, message); //客戶端A在10秒後取消訂閱 setTimeout(function () { clientA.unsubscribe('news'); }, 10000); }); setInterval(function () { clientB.publish('news', '這是一條新聞' + new Date().toLocaleString()); clientB.publish('sports', '這是一條體育' + new Date().toLocaleString()); }, 1000);
6、redis事務
redis事務能夠一次性執行多個命令,multi 命令以後,exec命令以前,命令都會放到隊列中,直到執行exec,將會執行隊列中的命令。
discard能夠取消事務,放棄執行事務塊內的全部命令。
const redis = require('redis'); let client = redis.createClient(6379, '127.0.0.1'); client.multi() .hset('person', 'name', 'haohao') .hset('person', 'age', '34') .exec(function (err, result) { if (err) { console.log(err); } console.log(result); client.quit(); });
注意redis中的事務跟mysql中的事務是有區別的。