![Java高級架構——Redis 簡述](http://p2.ttnews.xyz/loading.gif)
Redis 簡介
Redis 是完全開源免費的,遵守BSD協議,是一個高性能的key-value數據庫。
Redis 與其他 key – value 緩存產品有以下三個特點:
- Redis支持數據的持久化,可以將內存中的數據保持在磁盤中,重啟的時候可以再次加載進行使用。
- Redis不僅僅支持簡單的key-value類型的數據,同時還提供list,set,zset,hash等數據結構的存儲。
- Redis支持數據的備份,即master-slave模式的數據備份。
Redis 優勢
- 性能極高 – Redis能讀的速度是110000次/s,寫的速度是81000次/s 。
- 豐富的數據類型 – Redis支持二進制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 數據類型操作。
- 原子 – Redis的所有操作都是原子性的,同時Redis還支持對幾個操作全並後的原子性執行。
- 豐富的特性 – Redis還支持 publish/subscribe, 通知, key 過期等等特性。
Redis與其他key-value存儲有什麼不同?
- Redis有著更為複雜的數據結構並且提供對他們的原子性操作,這是一個不同於其他數據庫的進化路徑。Redis的數據類型都是基於基本數據結構的同時對程序員透明,無需進行額外的抽象。
- Redis運行在內存中但是可以持久化到磁盤,所以在對不同數據集進行高速讀寫時需要權衡內存,應為數據量不能大於硬件內存。在內存數據庫方面的另一個優點是, 相比在磁盤上相同的複雜的數據結構,在內存中操作起來非常簡單,這樣Redis可以做很多內部複雜性很強的事情。 同時,在磁盤格式方面他們是緊湊的以追加的方式產生的,因為他們並不需要進行隨機訪問。
redis的安裝
下載安裝包,博主採用的是redis-3.0.5.tar.gz,可以在這裡下載.
安裝步驟:
1
2
3
tar -zvxf redis-3.0.5.tar.gz
cd redis-3.0.5
make
redis服務端開啟
1
./redis-server
開啟之後如下圖所示:
![Java高級架構——Redis 簡述](http://p2.ttnews.xyz/loading.gif)
這種方式是啟動的redis使用的是默認配置,也可以通過啟動參數考古redis使用指定配置文件:
1
./redis-server [redis.conf的路徑]
如果修改redis.conf,採用redis默認的redis.conf文件, redis默認只能通過127.0.0.1:6379這個地址訪問,這樣就只能在本機上操作了,如果想要遠程操作就不可行了。這裡需要修改redis.conf這個配置文件,在配置文件中添加相應的ip地址,這裡假如添加ip地址:10.10.195.112,只需在redis.conf這個配置文件中添加:
1
2
bind 10.10.195.112
bind 127.0.0.1
這樣就可以遠程訪問redis服務器了(先配置,後開啟redis服務)。
redis客戶端連接
1
2
./redis-cli (本地)
./redis-cli -h [host] -p [port] -a [password] (遠程服務器)
Jedis開發
使用java開發redis,博主使用的是jedis,需要引入jedis的jar,可以在這裡下載。還需要commons-pool.jar包
連接
1
2
Jedis jedis = new Jedis("10.10.195.112");
System.out.println(jedis.ping());
輸出:PONG
操作字符串
1
2
jedis.set("name", "zzh");
System.out.println(jedis.get("name"));
輸出:zzh
操作列表
jedis.lpush("nblist", "jj");
jedis.lpush("nblist", "jj");
jedis.lpush("nblist", "yy");
jedis.lpush("nblist", "qq");
List
int length = list.size();
for(int i=0;i { System.out.println(list.get(i)); } 輸出: qq yy jj jj 獲取redis中所有的鍵 = Set for(String key : set) { System.out.println(key); } 輸出: = nam name tutorial list tutorial-list nblist tutoriallist keyname user listt zsetkey hash-key Redis常用命令
1 連接操作命令
- quit:關閉連接(connection)
- auth:簡單密碼認證
- help cmd: 查看cmd幫助,例如:help quit
2 持久化
- save:將數據同步保存到磁盤
- bgsave:將數據異步保存到磁盤
- lastsave:返回上次成功將數據保存到磁盤的Unix時戳
- shutdown:將數據同步保存到磁盤,然後關閉服務
3 遠程服務控制
- info:提供服務器的信息和統計
- monitor:實時轉儲收到的請求
- slaveof:改變複製策略設置
- config:在運行時配置Redis服務器
4 對key操作的命令
- 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
閱讀更多 以JAVA架構贏天下 的文章