Redis數據庫(Remote Dictionary Server)遠程字典服務器
下載地址 : Link
下載后
解壓后
綠色為客戶端
紅色為服務端
Redis命令參考API手冊
2: http://redisdoc.com/index.html
Redis 的 五大數據類型
1: string(字符串)
2: Hash(哈希)
3: List(列表)
4: Set(集合)
5: zset(sorted set) 有序集合
Redis數據庫的 Creat Read Update Delete(增刪改查)操作
-
string類型操作
-
設置key value
set key value (set數據時,存在就修改,不存在就添加)
-
獲取key value
get key
-
切換數據庫
-
默認創建16個數據庫(0-15)
select index
-
查看所有的key
keys *
-
查看當前數據庫的key,value數量(長度)
dbsize
-
清空當前數據庫數據(key,value)(謹慎操作)
flushdb
-
清空所有數據庫的數據(key,value)(謹慎操作)
flushall
-
刪除指定數據
del 對象 key
del monster name
-
讓數據在指定時間內獲取,超時變nil
setex name 10 zhangsan
-
一次設置多個key,value
mset name1 zhangsan name2 lisi
-
一次獲取多個key,value
mget name1 name2
-
Hash數據類型操作
-
設置單個數據 hset 名稱 key value
hset hero name tom
-
獲取單個數據 hget 名稱 key
hget hero name
-
設置多個數據
hmset monster2 name dybf age 18 sex man
-
獲取多個數據
-
方法1:指定key獲取
hmget monster2 name age sex
-
方法2:直接獲取所有key,value
hgetall monster2
-
獲取對象中有幾個key,value(長度)
-
hlen 對象
hlen monster
-
判斷在對象中是否有指定的key
hexists 對象 key
1表示有
0表示無
-
List鏈表 數據類型操作
- 有序的存儲數據
- 元素的值可以重復
-
lpush 從頭插入數據
lpush hero a b c
-
rpush 從尾插入數據
rpush hero d e f
-
lpop 從頭部彈出一個數據(刪除)
lpop hero
-
rpop 從尾部彈出一個數據(刪除)
rpop hero
-
del 刪除對象所有數據
del hero
-
獲取元素方法
lrange key start stop
irange monster 0 -1
(0表示從頭開始,-1表示以最后一個數據結束)
-
list存儲理解圖
-
list操作實例圖:
-
Set集合數據類型操作
-
底層是HashTable
-
無序存儲
-
元素值不可重復
-
sadd 添加數據
sadd email a@qq.com b@qq.com c@qq.com
-
srem 刪除指定數據
srem email a@qq.com
-
smembers 獲取所有數據
smembers email
-
sismember 判斷是否包含此數據
sismember email a@qq.com
-
Set類型實例
Redis 在GO中的操作
-
在Go中安裝 Redis庫插件
-
目的是可以在go中直接使用redis操作指令
-
前提是你裝了git,才能執行下列語句
github地址:https://github.com/gomodule/redigo
安裝命令:
go get github.com/gomodule/redigo/redis
-
GO中String類型操作Redis數據庫案例

1 package main 2 3 import ( 4 "fmt" 5 6 "github.com/gomodule/redigo/redis" 7 ) 8 9 func main() { 10 conn, err := redis.Dial("tcp", "127.0.0.1:6379") 11 if err != nil { 12 fmt.Println("GO連接數據庫127.0.0.1失敗:", err) 13 return 14 } 15 //fmt.Println("GO連接數據庫成功\n", conn) 16 /* 往數據庫里 寫入數據 set */ 17 _, err2 := conn.Do("set", "name", "tom") 18 if err != nil { 19 fmt.Println("set數據錯誤: ", err2) 20 return 21 } 22 /*延遲關閉服務器*/ 23 defer conn.Close() 24 fmt.Println("set數據成功", conn) 25 26 /* 往數據庫里 請求數據 get 27 r, err3 := redis.String(conn.Do("get", "name")) 28 */ 29 r, err3 := conn.Do("get", "name") 30 if err != nil { 31 fmt.Println("set數據錯誤: ", err3) 32 return 33 } 34 35 /* 把數據返回值從 接口 轉換成 string類型 */ 36 result, _ := redis.String(r, err3) 37 38 fmt.Println("get數據成功", result) 39 }
-
GO中Hash類型操作Redis數據庫案例
若遇下面到報錯:解決方法 del 對象
先刪除這個對象 在創建獲取即可
WRONGTYPE Operation against a key holding the wrong kind of value

1 package main 2 3 import ( 4 "fmt" 5 6 "github.com/gomodule/redigo/redis" 7 ) 8 9 func main() { 10 11 conn, err := redis.Dial("tcp", "127.0.0.1:6379") 12 if err != nil { 13 fmt.Println("連接數據庫失敗: ", err) 14 return 15 } 16 defer conn.Close() 17 18 /* 一次操作寫入 多個數據 */ 19 _, err2 := conn.Do("HMSet", "hero", "name", "托塔李天王", "age", 18, "sex", "男") 20 21 if err != nil { 22 fmt.Println("向 Redis數據庫 寫入數據 失敗! :", err2) 23 return 24 } 25 26 /* 一次 操作 獲取 多個數據 */ 27 result, err3 := redis.Strings(conn.Do("HGetAll", "hero")) 28 29 if err3 != nil { 30 fmt.Println("向 Redis數據庫 請求數據 失敗! ", err3) 31 return 32 } 33 for value, key := range result { 34 fmt.Printf("Hero[%v] = [%v]\n", value, key) 35 } 36 37 } 38 39 //輸出: 40 Hero[0] = [name] 41 Hero[1] = [托塔李天王] 42 Hero[2] = [age] 43 Hero[3] = [18] 44 Hero[4] = [sex] 45 Hero[5] = [男]
-
Redis 的 連接池
-
提高連接數據庫效率

1 package main 2 3 import ( 4 "fmt" 5 6 "github.com/gomodule/redigo/redis" 7 ) 8 9 var ( 10 //Pool 全局變量 連接池Pool 11 Pool *redis.Pool 12 ) 13 14 //當程序啟動時初始化執行,初始化連接池 15 func init() { 16 Pool = &redis.Pool{ 17 MaxIdle: 10, //最大空閑 連接數 18 MaxActive: 0, //與數據庫的最大連接數 0表示不限制 19 IdleTimeout: 100, //最大空閑時間,超過此事件自動回收連接 20 Dial: func() (redis.Conn, error) { 21 //連接的IP/端口 22 return redis.Dial("tcp", "127.0.0.1:6379") 23 }, 24 } 25 } 26 27 func main() { 28 //從連接池中獲取一個連接 29 conn := Pool.Get() 30 31 defer conn.Close() 32 33 //往數據庫中寫入數據 34 _, err := conn.Do("set", "name", "傑克奧特曼") 35 if err != nil { 36 fmt.Println("往Redis中寫入數據失敗") 37 return 38 } 39 40 //從數據庫中獲取數據 41 result, err := redis.String(conn.Do("get", "name")) 42 if err != nil { 43 fmt.Println("從Redis中獲取數據失敗!") 44 return 45 } 46 fmt.Println("從Redis中獲取數據成功!") 47 fmt.Printf("name:%v", result) 48 }