安裝redis
- 環(huán)境準備:yum install gcc-c++箍镜,gcc環(huán)境
- 上傳解壓redis安裝包
- 安裝redis硫眨,進入解壓目錄憨闰,輸入make命令進行安裝遇绞。
安裝注意事項:
- 如果沒有gcc環(huán)境,安裝不成功
- 如果有gcc環(huán)境讼撒,安裝過程中也可能出錯浑厚, 類似于
zmalloc.h:50:31: 致命錯誤:jemalloc/jemalloc.h:沒有那個文件或目錄
這種錯誤, 原因是默認的使用MALLOC為jemalloc的環(huán)境去建立redis根盒, 但是jemalloc沒有钳幅, 會報錯。jemalloc沒有看是有l(wèi)ibc炎滞, 因此編譯的時候加上MALLOC =libc就可以了 - make MALLOC=libc安裝在了redis/src目錄下敢艰, 可以指定安裝目錄蛛蒙,命令為
make install PREFIX=/aaa/bbb/redis MALLOC=libc
安裝后啟動
redis前端啟動:
進入安裝后的bin目錄下因妙, ./redis-server命令啟動,啟動后顯示類似于面包的圖形徽诲。 不過一旦Ctrl + c或者會話關閉redis服務就會關閉森瘪。
redis后端啟動:
解壓后的redis.conf文件拷貝只bin目錄牡属, 修改daemonize為yes, 啟動命令改為./redis-server redis.conf扼睬, 可以通過ps -ef | grep redis查看啟動情況逮栅。
啟動后關閉
強制性關閉:kill -9 redis服務進程號, 容易造成數(shù)據(jù)丟失
redis提供命令關閉:./redis-cli shutdown
redis命令行客戶端
同樣進入redis安裝后的bin目錄, ./redis-cli命令進入redis命令行客戶端证芭, 輸入命令實現(xiàn)對redis的操作瞳浦。
命令可以攜帶參數(shù)-h、-p废士。
-h:連接目標服務的IP叫潦。
-p:連接 目標服務的端口。
帶參數(shù)命令:./redis-cli -h 127.0.0.1 -p 6379官硝。
redis圖形化界面客戶端
在windows上安裝redis的圖形化界面客戶端矗蕊。redis-desktop-manager-0.8.0.3841.exe
連接redis服務,注意虛擬機關閉防火墻(service iptables stop)
可以使用圖形化客戶端啟動命令行氢架,redis服務名稱上右擊傻咖,選Console。
輸入命令實現(xiàn)對redis的操作岖研。
redis的java客戶端jedis
jedis對redis的操作就類似于jdbc對數(shù)據(jù)庫的操作卿操。
導包: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格式存儲拓售。value的類型可以是字符串(String)窥摄,散列(Hash),列表(list)础淤,集合(sets)崭放,有序集合(sorted sets、zsets)
字符串類型(key, value)
存值:set key value
鸽凶, 成功返回OK
取值:get key
币砂, 返回對應key的value, 如果沒有返回null
value可以轉換成整形時吱瘩,可以設置從0遞增:incr count
道伟。key為count, 每執(zhí)行一次使碾,count對應的value加1。key不存在自動創(chuàng)建并賦值為0祝懂, 執(zhí)行第一次后為1票摇。
value可以轉換成整形時,可以設置從某一值遞減:decr count
砚蓬。key為count矢门, 每執(zhí)行一次,count對應的value減1。key不存在自動創(chuàng)建并賦值為0祟剔, 執(zhí)行第一次后為-1隔躲。
value可以轉換成整形時,可以設置按照指定數(shù)值遞增:incrby key 遞增值
物延。如incrby count 4宣旱。count從0開始,每次遞增4叛薯。
value可以轉換成整形時浑吟,可以設置按照指定數(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轩触, 返回對應的name值。沒有返回null
存多個值:hmset key field1 value1 field2 value2
家夺。如 hmset user age 18 address 北京脱柱,成功返回OK。
取多個值: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左側存值:lpush key values[value1, value2, value3……]
回论。如lpush mylist 1 2 3 4散罕。成功返回list的數(shù)量。
list右側存值:rpush key values[value1, value2, value3……]
傀蓉。如rpush mylist 5 6 7 8欧漱。
鏈表元素數(shù)量:llen key
。 如llen mylist葬燎。
指定位置元素:lrange key start end
误甚。如lrange mylist 3 5缚甩。start 可以為負數(shù)。比如-1代表最后一個窑邦, -2代表倒數(shù)第二個擅威。start和end為索引。上面的存儲values為4 3 2 1 5 6 7 8冈钦,end大于最后一個數(shù)的索引了按照最后一個值算郊丛。
彈出左邊元素:lpop key
。如lpop mylist派继。
彈出右邊元素:rpop key
宾袜。如果彈出則values列表中不在含有此元素。
集合(key values[value1, value2, value3……])
集合的存儲和list一樣驾窟, 不同的是set中的元素不能重復庆猫,而且set在服務端可以完成多個sets的聚合運算。
添加數(shù)據(jù):sadd key values[value1, value2, value3……]
绅络,如果set中已經有了不會重復添加月培。返回成功添加的元素個數(shù)。比如:sadd myset 1 2 2 3 3 4
列舉set中元素:smembers key
恩急。如:smembers myset杉畜。
刪除指定成員:srem key members
。如srem myset 1 2衷恭。成功返回1
兩個集合取并集:sunion set1 set2
此叠。屬于set1或者是屬于set2
兩個集合取交集:sinter set1 set2
。屬于set1而且屬于set2
兩個集合去差集:sdiff set1 set2
随珠。屬于set1但是不屬于set2
有序集合
集合存儲類型和set一樣灭袁,不同的是有序集合每一個成員都有一個分數(shù)與之關聯(lián),redis可以通過分數(shù)來為集合中的成員進行排序窗看。
添加數(shù)據(jù):zadd key score member1 score member2……
茸歧。如zadd myzset 1 a 2 b 3 c,返回添加的數(shù)據(jù)個數(shù)显沈。
列舉zset中的元素:zrange key start end [withscores]
:獲取集合中角標為start-end的成員软瞎。withscores 表示返回結果包含分數(shù)。
給集合中成員增加分數(shù):zincrby key score member
拉讯。如zincrby myzset 0.1 a涤浇。返回增加后的a的分數(shù)。
刪除元素:zrem key member[member1,member2……]
遂唧。如 zrem myzset a b芙代。返回刪除的個數(shù)。