Redis是一個開源的使用ANSI C語言編寫、遵守BSD協議、支持網絡、可基於內存亦可持久化的日志型、Key-Value數據庫,並提供多種語言的API。它通常被稱為數據結構服務器,因為值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets)和有序集合(sorted sets)等類型。
Redis支持主從同步。數據可以從主服務器向任意數量的從服務器上同步,從服務器可以是關聯其他從服務器的主服務器。
這使得Redis可執行單層樹復制。存盤可以有意無意的對數據進行寫操作。由於完全實現了發布/訂閱機制,使得從數據庫在任何地方同步樹時,可訂閱一個頻道並接收主服務器完整的消息發布記錄。同步對讀取操作的可擴展性和數據冗余很有幫助。
1.1、相關網站
官網:redis.io
github:https://github.com/MSOpenTech/redis
下載地址:https://github.com/MSOpenTech/redis/releases
三、安裝與配置Redis
3.1、下載最新版的Redis
打開redis在github上的網站:https://github.com/MSOpenTech/redis/releases,選擇下載最新版的Redis,寫該文字時最新版本是3.2.1版。
這里我們選擇下載手動安裝包Redis-x64-3.2.100.zip。如果是32位的可以下載源代碼后自己編譯出32位的版本,在https://github.com/dmajkic/redis/downloads可以下載到32的安裝文件,不過版本有點舊了。
3.2、添加環境變量
將下載后的安裝包解壓到磁盤中,最好是沒有中文路徑,沒有特殊字符的目錄下,比如:d:\redis目錄下。為了更加方便的使用Redis,可以添加環境變量,在“系統環境變量”中的“Path”變量下添加redis路徑,如下所示:
確定后啟動cmd,運行redis-server測試。
3.3、啟動服務器
在命令模式下運行:redis-server.exe redis.windows.conf,如果運行提示未找到conf文件,則把參數中的配置文件路徑加上,如:
啟動成功后會有一個字符界面,提示連接的端口號是:6379,請不要關閉該服務器,等待客戶端連接;這里也可以把redis作成windows服務,不過redis多數情況會在linux平台使用。
3.4、啟動客戶端
再用cmd開啟一個命令容器,輸入命令:redis-cli -h 127.0.0.1 -p 6379,執行成功后如下所示:
-h用於指定服務器位置,-p用於指定端口號;如果想改變該內容可以修改.conf文件。
3.5、測試並運行
添加數據:set <key> <value>
獲得數據:get <key>
是否存在:exists <key>
刪除數據:del <key>
修改數據:set <key> <value>
幫助命令:help <命令名稱>
查找鍵:keys <名稱能配符>
設置過期時間:expire <key> <秒數>
刪除過期時間:persist <key>
info
服務器基本信息
monitor
實時轉儲收到的請求
config get ????
獲取服務器的參數配置
flushdb
清空當前數據庫
flushall
清除所有數據庫
更多命令:http://doc.redisfans.com/
三、常用命令
1)連接操作命令
quit:關閉連接(connection)
auth:簡單密碼認證
help cmd: 查看cmd幫助,例如:help quit
2)持久化
save:將數據同步保存到磁盤
bgsave:將數據異步保存到磁盤
lastsave:返回上次成功將數據保存到磁盤的Unix時戳
shundown:將數據同步保存到磁盤,然后關閉服務
3)遠程服務控制
info:提供服務器的信息和統計
monitor:實時轉儲收到的請求
slaveof:改變復制策略設置
config:在運行時配置Redis服務器
4)對value操作的命令
exists(key):確認一個key是否存在
del(key):刪除一個key
type(key):返回值的類型
keys(pattern):返回滿足給定pattern的所有key
randomkey:隨機返回key空間的一個
keyrename(oldname, newname):重命名key
dbsize:返回當前數據庫中key的數目
expire:設定一個key的活動時間(s)
ttl:獲得一個key的活動時間
select(index):按索引查詢
move(key, dbindex):移動當前數據庫中的key到dbindex數據庫
flushdb:刪除當前選擇數據庫中的所有key
flushall:刪除所有數據庫中的所有key
5)String
set(key, value):給數據庫中名稱為key的string賦予值value
get(key):返回數據庫中名稱為key的string的value
getset(key, value):給名稱為key的string賦予上一次的value
mget(key1, key2,…, key N):返回庫中多個string的value
setnx(key, value):添加string,名稱為key,值為value
setex(key, time, value):向庫中添加string,設定過期時間time
mset(key N, value N):批量設置多個string的值
msetnx(key N, value N):如果所有名稱為key i的string都不存在
incr(key):名稱為key的string增1操作
incrby(key, integer):名稱為key的string增加integer
decr(key):名稱為key的string減1操作
decrby(key, integer):名稱為key的string減少integer
append(key, value):名稱為key的string的值附加value
substr(key, start, end):返回名稱為key的string的value的子串
6)List
rpush(key, value):在名稱為key的list尾添加一個值為value的元素
lpush(key, value):在名稱為key的list頭添加一個值為value的 元素
llen(key):返回名稱為key的list的長度
lrange(key, start, end):返回名稱為key的list中start至end之間的元素
ltrim(key, start, end):截取名稱為key的list
lindex(key, index):返回名稱為key的list中index位置的元素
lset(key, index, value):給名稱為key的list中index位置的元素賦值
lrem(key, count, value):刪除count個key的list中值為value的元素
lpop(key):返回並刪除名稱為key的list中的首元素
rpop(key):返回並刪除名稱為key的list中的尾元素
blpop(key1, key2,… key N, timeout):lpop命令的block版本。
brpop(key1, key2,… key N, timeout):rpop的block版本。
rpoplpush(srckey, dstkey):返回並刪除名稱為srckey的list的尾元素,並將該元素添加到名稱為dstkey的list的頭部
7)Set
sadd(key, member):向名稱為key的set中添加元素member
srem(key, member) :刪除名稱為key的set中的元素member
spop(key) :隨機返回並刪除名稱為key的set中一個元素
smove(srckey, dstkey, member) :移到集合元素
scard(key) :返回名稱為key的set的基數
sismember(key, member) :member是否是名稱為key的set的元素
sinter(key1, key2,…key N) :求交集
sinterstore(dstkey, (keys)) :求交集並將交集保存到dstkey的集合
sunion(key1, (keys)) :求並集
sunionstore(dstkey, (keys)) :求並集並將並集保存到dstkey的集合
sdiff(key1, (keys)) :求差集
sdiffstore(dstkey, (keys)) :求差集並將差集保存到dstkey的集合
smembers(key) :返回名稱為key的set的所有元素
srandmember(key) :隨機返回名稱為key的set的一個元素
8)Hash
hset(key, field, value):向名稱為key的hash中添加元素field
hget(key, field):返回名稱為key的hash中field對應的value
hmget(key, (fields)):返回名稱為key的hash中field i對應的value
hmset(key, (fields)):向名稱為key的hash中添加元素field
hincrby(key, field, integer):將名稱為key的hash中field的value增加integer
hexists(key, field):名稱為key的hash中是否存在鍵為field的域
hdel(key, field):刪除名稱為key的hash中鍵為field的域
hlen(key):返回名稱為key的hash中元素個數
hkeys(key):返回名稱為key的hash中所有鍵
hvals(key):返回名稱為key的hash中所有鍵對應的value
hgetall(key):返回名稱為key的hash中所有的鍵(field)及其對應的value
3.6、添加windows服務
如果不添加windows服務,redis-server.exe程序一直要以GUI的形式開啟在任務欄,有時候不小心會被關閉,其實也可以像其它數據庫如Oracle一樣將redis做成一個服務,以服務的形式運行,注冊服務的方法如下:
解釋:

四、使用Jedis訪問Redis數據庫
Jedis是redis的java版的客戶端實現,在java程序中我們可以通過Jedis訪問Redis數據庫,源代碼地址(https://github.com/xetorthio/jedis),實現訪問的方法如下:
4.1、引用或依賴Jedis包
4.1.1、如果使用Maven,修改pom.xml文件,添加Jedis的依賴,修改后的pom.xml文件如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zhangguo</groupId> <artifactId>JedisDemo</artifactId> <version>0.0.1</version> <dependencies> <!-- Jedis --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.8.1</version> </dependency> </dependencies> </project>
引用成功后的結果:
從引用的結果可以發現jedis使用了commons的連接池技術。
4.1.2、如果直接添加引用,可以去github下載jedis源碼包自行編譯,下載地址是:https://github.com/xetorthio/jedis/releases,當前最新版本2.8.1。
如果想直接下載jar包,可以到Maven共享資源庫(http://search.maven.org/)下載,如下所示:
4.2、調用Jedis
先開啟redis數據庫服務,處理監聽狀態,在java項目中編寫如下測試代碼:
package com.zhangguo.jedisdemo; import redis.clients.jedis.Jedis; public class HelloJedis { public static void main(String[] args) { //實例化一個jedis對象,連接到指定的服務器,指定連接端口號 Jedis jedis = new Jedis("127.0.0.1",6379); //將key為message的信息寫入redis數據庫中 jedis.set("message", "Hello Redis!"); //從數據庫中取出key為message的數據 String value = jedis.get("message"); System.out.println(value); //關閉連接 jedis.close(); } }
運行結果:
================================================
我喜歡程序員,他們單純、固執、容易體會到成就感;面對壓力,能夠挑燈夜戰不眠不休;面對困難,能夠迎難而上挑戰自我。
他們也會感到困惑與傍徨,但每個程序員的心中都有一個比爾蓋茨或是喬布斯的夢想“用智慧開創屬於自己的事業”。
我想說的是,其實我是一個程序員。