1. 程式人生 > 遊戲 >2D手繪獨立冒險遊戲《ITORAH》3月21日登陸Steam

2D手繪獨立冒險遊戲《ITORAH》3月21日登陸Steam

Redis資料庫

Redis 簡介

Redis是完全開源免費的,遵守BSD協議,是一個高效能的key-value資料庫。

Redis與其他 key- value 快取產品有以下三個特點:

Redis支援資料的持久化,可以將記憶體中的資料儲存在磁碟中,重啟的時候可以再次載入進行使用。

Redis不僅僅支援簡單的key-value型別的資料,同時還提供list,set,zset,hash等資料結構的儲存。

Redis支援資料的備份,即master-slave模式的資料備份。

redis: 半持久化,儲存於記憶體和硬碟

Redis和MongoDB的區別

nRedis是完全在記憶體中儲存資料的資料庫,使用磁碟只是為了永續性目的,Redis資料全部存在記憶體,定期寫入磁碟,當記憶體不夠時,可以選擇指定的LRU演算法刪除資料,持久化是使用RDB方式或者aof方式。

mongodb是文件型的非關係型資料庫,MongoDB更類似MySQL,支援欄位索引、遊標操作,其優勢在於查詢功能比較強大,擅長查詢JSON資料,能儲存海量資料,但是不支援事務。

一 前期準備

下載地址:

https://github.com/ServiceStack/redis-windows

https://github.com/MSOpenTech/redis/releases

設定 redis.windows.conf

455行 maxheap 1024000000 設定最大的資料堆的大小

387行 requirepass 123456 設定資料庫的密碼

ubuntu中路徑為

/etc/redis/redis.conf

:set number 顯示行號

:n,代表跳轉到第n行,如:79,就跳轉到第79行。

增加行的方法

按大寫的G 跳到最後一行。 然後按小寫的O鍵,增加一行。

port 埠號為

6379

二 啟動服務

cd C:\redis64-2.8.2101

C:\redis64-2.8.2101>redis-server.exe redis.windows.conf #執行 redis-server.exe 並載入Windows的配置檔案

C:\redis64-2.8.2101—>dump.rdb 為資料檔案

mac 下安裝也可以使用 homebrew,homebrew 是 mac 的包管理器。

ce1、執行 brew install redis

2、啟動 redis,可以使用後臺服務啟動 brew services start redis。或者直接啟動:redis-server /usr/local/etc/redis.conf

三 測試是否連線成功

再開啟一個新的終端

輸入密碼 (這個密碼就是在redis.windows.conf裡面設定的密碼)

C:\redis64-2.8.2101>Redis-cli.exe

127.0.0.1:6379>auth '123456'

注意:

密碼 為 字串型別

四 Redis值的型別

  1. 字串 String
  2. 雜湊 hash
  3. 列表 list
  4. 集合 set
  5. 有序集合 zset

資料操作的全部命令:

http://redis.cn/commands.html

config get databases 檢視所有的資料庫 資料庫以0開始 一共16個

(1) String

Ss概述:String是redis最基本的型別,最大能儲存512MB的資料,String型別是二進位制安全的,即可以儲存任何資料、比如數字、圖片、序列化物件等

一個key對應一個value

string型別是Redis最基本的資料型別,一個鍵最大能儲存512MB。

1、設定鍵值

A、設定鍵值

set key value

set name "zhangsan"

B、設定鍵值及過期時間,以秒為單位

setex key seconds value

setex name 10 'zhangsan'

C、檢視有效時間,以秒為單位

ttl key

ttl name

D、只有在 key 不存在時設定 key 的值

setnx key value

 setnx name 'a'

E、設定多個鍵值

mset key value [key value ……]

mset name 'zs' age 18 	

F、覆蓋key對應的string的一部分,從指定的offset處開始,覆蓋value的長度

setrange key offset value

redis> SET key1 "Hello World"
OK
redis> SETRANGE key1 6 "Redis"
(integer) 11
redis> GET key1
"Hello Redis"
redis> 

2、key的操作

A.根據鍵獲取值,如果鍵不存在則返回None(null 0 nil)

get key

get name

B、根據多個鍵獲取多個值

mget key [key ……]

mget name age

C、返回 key 中字串值的子字元

getrange key start end

getrange name 0 4

D、將給定 key 的值設為 value ,並返回 key 的舊值(old value)

getset key value

getset name 'x'

3、運算

要求:值是字串型別的數字

A、將key對應的值加1

incr key

incr age

B、將key對應的值減1

decr key

decr age

C、將key對應的值加整數

incrby key intnum

incrby age 10 fd

D、將key對應的值減整數

decrby key intnum

decrby age 10

4、其它

A、追加值

append key value

append age 20

B、獲取值長度

strlen key

strlen age

key 鍵的操作

A、查詢所有符合給定模式pattern(正則表示式)的 key

keys *

KEYS o

KEYS t??

支援的正則表達模式:

  • h?llo 匹配 hello, hallo 和 hxllo
  • h*llo 匹配 hllo 和 heeeello
  • h[ae]llo 匹配 hello 和 hallo, 但是不匹配 hillo
  • h[^e]llo 匹配 hallo, hbllo, … 但是不匹配 hello
  • h[a-b]llo 匹配 hallo 和 hbllo

B、判斷鍵是否存在,如果存在返回1,不存在返回0

exists key

exists name

C、檢視鍵對應的value型別

type key

type name

D、刪除鍵及對應的值

del key [key ……]

E、設定過期時間,以秒為單位

expire key seconds

expire age 10

F、檢視有效時間,以秒為單位

ttl key

H、以毫秒為單位返回 key 的剩餘的過期時間

pttl key

I、移除 key 的過期時間,key 將持久保持

persist key

J、刪除所有的key

flushdb 刪除當前資料庫中的所有

flushall 刪除所有資料庫中的key

K、修改 key 的名稱(僅當 newkey 不存在時,將 key 改名為 newkey)

rename key newkey

L、將key移動到指定的資料庫中

Move key db

mover name 1	#將name 移動到資料庫1

M、隨機返回一個key

randomkey

(2) hash

概述:hash用於儲存物件

{

naem:"tom",
age:18

}

Redis hash 是一個鍵值(key=>value)對集合。

Redis hash是一個string型別的field和value的對映表,hash特別適合用於儲存物件。

1、設定

a、設定單個值

hset key field value

redis> e
(integer) 1z
redis> HGET myhash field1
"Hello"

b、設定多個值

hmset key field value [field value ……]

hmset a x "o" y "y" z "z"

C 為雜湊表 key 中的指定欄位的整數值加上增量 increment

hincrby key field incrment

hincrby hh age 10

E 為雜湊表 key 中的指定欄位的浮點數值加上增量 increment

HINCRBYFLOAT key field increment

hincrbyfloat hh money 0.1

F 只有在欄位 field 不存在時,設定雜湊表字段的值

hsetnx key field value

 hget hh name

2、獲取

A、獲取一個屬性的值

hget key field

hget name field1

B、獲取多個屬性的值

hmget key filed [filed ……]

C、獲取所有欄位和值

hgetall key

D、獲取所有欄位

hkeys key

E、獲取所有值

hvals key

F、返回包含資料的個數

hlen key

3、其它

A、判斷屬性是否存在,存在返回1,不存在返回0

hexists key field

hexists a x

B、刪除欄位及值

hdel key field [field ……]

hdel a x y z

C、返回值的字串長度 起始版本 3.2

hstrlen key field

(3) 列表 list

概述:Redis 列表是簡單的字串列表,按照插入順序排序。你可以新增一個元素到列表的頭部(左邊)或者尾部(右邊)

1、設定

A、在頭部插入

lpush key value [vlaue ……]

lpush demo 2 3`

將一個值插入到已存在的列表頭部,列表不存在時操作無效

Lpushx key val

lpushx list 'a'

B、在尾部插入

rpush key value [vlaue ……]

rpush demo 2 1

為已存在的列表新增值

rpushx key val

rpushx mm 'a'	

C、在一個元素的前|後插入新元素

linsenrt key before|after value value

LINSERT mylist BEFORE "World" "There"

D、設定指定索引的元素值

lset key index value

lset demo 0 'x'	#把x的索引值設定為0 並新增

注意:index從0開始

注意:索引值可以是負數,表示偏移量是從list的尾部開始,如-1表示最後一個元素

2、獲取

A、移除並返回key對應的list的第一個元素

lpop key

lpop demo

B、移除並返回key對應的list的最後一個元素

rpop key

rpop demo

C、Lrem 根據引數 COUNT 的值,移除列表中與引數 VALUE 相等的元素

COUNT 的值可以是以下幾種:

  • count > 0 : 從表頭開始向表尾搜尋,移除與 VALUE 相等的元素,數量為 COUNT 。
  • count < 0 : 從表尾開始向表頭搜尋,移除與 VALUE 相等的元素,數量為 COUNT 的絕對值。
  • count = 0 : 移除表中所有與 VALUE 相等的值

LREM KEY_NAME COUNT VALUE

lrem mm 3 'b'  #刪除mm列表中 3個 元素b 從左往右搜尋

D、返回儲存在key的列表中的指定範圍的元素

lrange key start end

lrange demo 0 -1	#檢視列表中的所有元素

注意:start end都是從0開始
注意:偏移量可以是負數

3、其它

A、裁剪列表,改為原集合的一個子集

ltrim key start end

ltrim demo 1 -1	#將索引為1 到 -1的元素裁剪出來

注意:start end都是從0開始
注意:偏移量可以是負數

B、返回儲存在key裡的list的長度

llen key

C、返回列表中索引對應的值

lindex key index

LINDEX mylist 0

四 集合 set

概述:無序集合,元素型別為String型別,元素具有唯一性,不重複

{ 'a','b'}

1、設定

A、新增元素

sadd key member [member ……]

sadd set 'a' 'b' 'c'

2、獲取

A、返回key集合中所有元素

smembers key

smembers set

B、返回集合元素個數

scard key

scard set

C、移除並返回集合中的一個隨機元素

Spop key

spop set

D、返回集合中一個或多個隨機數

srandmember key count

srandmember set		#返回一個隨機元素
srandmember set 2	#返回2個隨機元素

E、移除集合中一個或多個成員

srem key member1 [memkber2]

srem set 'd' 'b'ss

3、集合的其它操作

A、求多個集合的交集s

sinter key [key ……]

 sinter m l	#求集合l和集合m的交集

B、求多個集合的差集

sdiff key [key ……]

sdiff m l	#求差集 注意比較順序

C、求多個集合的合集

sunion key [key ……]

sunion  l m	#將集合l 和集合m的值結合在一起

D、判斷元素是否在集合中,存在返回1,不存在返回0

sismember key member

sissmember m 'a'   #集合m中是否存在元素'a'

五 有序集合 zset

概述:

a、有序集合,元素型別為Sting,元素具有唯一性,不能重複

b、每個元素都會關聯一個double型別的score(表示權重),通過權重的大小排序,元素的score可以相同

1、設定

A、新增

zadd key score member [score member ……]

zadd zset 1 a 5 b 3 c 2 d 4 e

B、有序集合中對指定成員的分數加上增量 increment

Zincrby key increment mcfaember

zincrby zset 10 'a'   #給a的權重上加10

2、獲取

A、返回指定範圍的元素

zrange key start end

zrange z1 0 -1

B、返回元素個數

zcard key

 zcard z1

C、返回有序集合key中,score在min和max之間的元素的個數

zcount key min max

D、返回有序集合key中,成員member的score值

zscore key member

zscore l 'c'	#wisc返回c的權重

E、當前集合所有的值和權重

ZRANGE key 0 -1 WITHSCORES

資料庫:

預設在 資料庫 0

select num 進行資料庫的切換

select 1 #進入到資料庫1

六 持久化設定

RDB和AOF

RDB方式按照一定的時間間隔對資料集建立基於時間點的快照。
AOF方式記錄Server收到的寫操作到日誌檔案,在Server重啟時通過回放這些寫操作來重建資料集。該方式類似於MySQL中基於語句格式的binlog。當日志變大時Redis可在後臺重寫日誌。
若僅期望資料在Server執行期間存在則可禁用兩種持久化方案。在同一Redis例項中同時開啟AOF和RDB方式的資料持久化方案也是可以的。該情況下Redis重啟時AOF檔案將用於重建原始資料集,因為叫RDB方式而言,AOF方式能最大限度的保證資料完整性。

(1) RDB持久化設定

預設情況下Redis在磁碟上建立二進位制格式的命名為dump.rdb的資料快照。可以通過配置檔案配置每隔N秒且資料集上至少有M個變化時建立快照、是否對資料進行壓縮、快照名稱、存放快照的工作目錄。redis 2.4.10的預設配置如下:

#900秒後且至少1個key發生變化時建立快照  
save 900 1  
#300秒後且至少10個key發生變化時建立快照  
save 300 10  
#60秒後且至少10000個key發生變化時建立快照  
save 60 10000  
#可通過註釋所有save開頭的行來禁用RDB持久化  
#建立快照時對資料進行壓縮  
rdbcompression yes  
#快照名稱  
dbfilename dump.rdb  
#存放快照的目錄(AOF檔案也會被存放在此目錄) 
/usr/local/var/db/redis

(2) AOF持久化設定

利用快照的持久化方式不是非常可靠,當執行Redis的計算機停止工作、意外掉電、意外殺掉了Redis程序那麼最近寫入Redis的資料將會丟。對於某些應用這或許不成問題,但對於持久化要求非常高的應用場景快照方式不是理想的選擇。AOF檔案是一個替代方案,用以最大限度的持久化資料。同樣,可以通過配置檔案來開閉AOF:

#關閉AOF  
appendonly no  
#開啟AOF  
appendonly yes 

當設定appendonly為yes後,每次Redis接收到的改變資料集的命令都會被追加到AOF檔案。重啟Redis後會重放AOF檔案來重建資料。