安裝redis
- 環(huán)境準(zhǔn)備:yum install gcc-c++,gcc環(huán)境
- 上傳解壓redis安裝包
- 安裝redis,進(jìn)入解壓目錄,輸入make命令進(jìn)行安裝。
安裝注意事項(xiàng):
- 如果沒有g(shù)cc環(huán)境,安裝不成功
- 如果有g(shù)cc環(huán)境,安裝過程中也可能出錯(cuò), 類似于
zmalloc.h:50:31: 致命錯(cuò)誤:jemalloc/jemalloc.h:沒有那個(gè)文件或目錄這種錯(cuò)誤, 原因是默認(rèn)的使用MALLOC為jemalloc的環(huán)境去建立redis, 但是jemalloc沒有, 會(huì)報(bào)錯(cuò)。jemalloc沒有看是有l(wèi)ibc, 因此編譯的時(shí)候加上MALLOC =libc就可以了 - make MALLOC=libc安裝在了redis/src目錄下, 可以指定安裝目錄,命令為
make install PREFIX=/aaa/bbb/redis MALLOC=libc
安裝后啟動(dòng)
redis前端啟動(dòng):
進(jìn)入安裝后的bin目錄下, ./redis-server命令啟動(dòng),啟動(dòng)后顯示類似于面包的圖形。 不過一旦Ctrl + c或者會(huì)話關(guān)閉redis服務(wù)就會(huì)關(guān)閉。
redis后端啟動(dòng):
解壓后的redis.conf文件拷貝只bin目錄, 修改daemonize為yes, 啟動(dòng)命令改為./redis-server redis.conf, 可以通過ps -ef | grep redis查看啟動(dòng)情況。
啟動(dòng)后關(guān)閉
強(qiáng)制性關(guān)閉:kill -9 redis服務(wù)進(jìn)程號(hào), 容易造成數(shù)據(jù)丟失
redis提供命令關(guān)閉:./redis-cli shutdown
redis命令行客戶端
同樣進(jìn)入redis安裝后的bin目錄, ./redis-cli命令進(jìn)入redis命令行客戶端, 輸入命令實(shí)現(xiàn)對redis的操作。
命令可以攜帶參數(shù)-h、-p。
-h:連接目標(biāo)服務(wù)的IP。
-p:連接 目標(biāo)服務(wù)的端口。
帶參數(shù)命令:./redis-cli -h 127.0.0.1 -p 6379。
redis圖形化界面客戶端
在windows上安裝redis的圖形化界面客戶端。redis-desktop-manager-0.8.0.3841.exe
連接redis服務(wù),注意虛擬機(jī)關(guān)閉防火墻(service iptables stop)
可以使用圖形化客戶端啟動(dòng)命令行,redis服務(wù)名稱上右擊,選Console。
輸入命令實(shí)現(xiàn)對redis的操作。
redis的java客戶端jedis
jedis對redis的操作就類似于jdbc對數(shù)據(jù)庫的操作。
導(dǎo)包:commons-pool版本.jar、jedis-版本.jar。
jedis連接操作:
import redis.clients.jedis.Jedis;
public class JedisTest {
public static void main(String[] args) {
// 創(chuàng)建jedislianjie
Jedis jedis = new Jedis("192.168.130.128", 6379);
// 使用jedis操作redis, 就是redis命令
jedis.select(1);
String setResult = jedis.set("name", "zhangsan");
String getResult = jedis.get("name");
System.out.println(setResult + ":" + getResult);
// 釋放資源
jedis.close();
}
}
jedis有頻繁創(chuàng)建銷毀資源的問題, 就跟jdbc一樣,使用jedispool操作redis:
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
public class JedisPoolTest {
public static void main(String[] args) {
// 創(chuàng)建jedispool
JedisPool jedisPool = new JedisPool("192.168.130.128", 6379);
// 從jedispool中獲取jedis對象
Jedis jedis = jedisPool.getResource();
// jedis操作redis
jedis.select(1);
String setResult = jedis.set("age", "18");
String getResult = jedis.get("age");
System.out.println(setResult + ":" + getResult);
jedis.close();
jedisPool.close();
}
}
redis命令
redis是以鍵值對key/value格式存儲(chǔ)。value的類型可以是字符串(String),散列(Hash),列表(list),集合(sets),有序集合(sorted sets、zsets)
字符串類型(key, value)
存值:set key value, 成功返回OK
取值:get key, 返回對應(yīng)key的value, 如果沒有返回null
value可以轉(zhuǎn)換成整形時(shí),可以設(shè)置從0遞增:incr count。key為count, 每執(zhí)行一次,count對應(yīng)的value加1。key不存在自動(dòng)創(chuàng)建并賦值為0, 執(zhí)行第一次后為1。
value可以轉(zhuǎn)換成整形時(shí),可以設(shè)置從某一值遞減:decr count。key為count, 每執(zhí)行一次,count對應(yīng)的value減1。key不存在自動(dòng)創(chuàng)建并賦值為0, 執(zhí)行第一次后為-1。
value可以轉(zhuǎn)換成整形時(shí),可以設(shè)置按照指定數(shù)值遞增:incrby key 遞增值。如incrby count 4。count從0開始,每次遞增4。
value可以轉(zhuǎn)換成整形時(shí),可以設(shè)置按照指定數(shù)值遞減:decrby key 遞減值。如decrby count 4。count從0開始,每次遞增4。
散列類型(key, (field, value))
存值:hset key field value。如 hset user name 張三,成功返回1。
取值:hget key field。如 hget user name, 返回對應(yīng)的name值。沒有返回null
存多個(gè)值:hmset key field1 value1 field2 value2。如 hmset user age 18 address 北京,成功返回OK。
取多個(gè)值:hmget key field1 field2 field3。如 hmget user name age address,有值返回,沒值返回空。
查看包含field數(shù)量:hlen key。如hlen user
獲取key下的field/value:hgetall key 。如hgetall user
獲取所有的field:hkeys key 。如hkeys user
獲取所有的value:hvals key 。如hvals user
刪除指定field:hdel key field 。如hdel user field
列表(key values[value1, value2, value3……])
list左側(cè)存值:lpush key values[value1, value2, value3……]。如lpush mylist 1 2 3 4。成功返回list的數(shù)量。
list右側(cè)存值:rpush key values[value1, value2, value3……]。如rpush mylist 5 6 7 8。
鏈表元素?cái)?shù)量:llen key。 如llen mylist。
指定位置元素:lrange key start end。如lrange mylist 3 5。start 可以為負(fù)數(shù)。比如-1代表最后一個(gè), -2代表倒數(shù)第二個(gè)。start和end為索引。上面的存儲(chǔ)values為4 3 2 1 5 6 7 8,end大于最后一個(gè)數(shù)的索引了按照最后一個(gè)值算。
彈出左邊元素:lpop key。如lpop mylist。
彈出右邊元素:rpop key。如果彈出則values列表中不在含有此元素。
集合(key values[value1, value2, value3……])
集合的存儲(chǔ)和list一樣, 不同的是set中的元素不能重復(fù),而且set在服務(wù)端可以完成多個(gè)sets的聚合運(yùn)算。
添加數(shù)據(jù):sadd key values[value1, value2, value3……],如果set中已經(jīng)有了不會(huì)重復(fù)添加。返回成功添加的元素個(gè)數(shù)。比如:sadd myset 1 2 2 3 3 4
列舉set中元素:smembers key。如:smembers myset。
刪除指定成員:srem key members。如srem myset 1 2。成功返回1
兩個(gè)集合取并集:sunion set1 set2。屬于set1或者是屬于set2
兩個(gè)集合取交集:sinter set1 set2。屬于set1而且屬于set2
兩個(gè)集合去差集:sdiff set1 set2。屬于set1但是不屬于set2
有序集合
集合存儲(chǔ)類型和set一樣,不同的是有序集合每一個(gè)成員都有一個(gè)分?jǐn)?shù)與之關(guān)聯(lián),redis可以通過分?jǐn)?shù)來為集合中的成員進(jìn)行排序。
添加數(shù)據(jù):zadd key score member1 score member2……。如zadd myzset 1 a 2 b 3 c,返回添加的數(shù)據(jù)個(gè)數(shù)。
列舉zset中的元素:zrange key start end [withscores]:獲取集合中角標(biāo)為start-end的成員。withscores 表示返回結(jié)果包含分?jǐn)?shù)。
給集合中成員增加分?jǐn)?shù):zincrby key score member。如zincrby myzset 0.1 a。返回增加后的a的分?jǐn)?shù)。
刪除元素:zrem key member[member1,member2……]。如 zrem myzset a b。返回刪除的個(gè)數(shù)。