一、在linux上安裝redis
1)安裝redis編譯的c環境,yum install gcc-c++
2)將redis-3.0.0.tar.gz上傳到Linux系統中
3)解壓到/usr/local下 tar -xvf redis-3.0.0.tar.gz -C /usr/local
4)進入redis-3.0.0目錄 使用make命令編譯redis
5)在redis-3.0.0目錄中 使用make PREFIX=/usr/local/redis install命令安裝 redis到/usr/local/redis中
6)拷貝redis-3.0.0中的redis.conf到安裝目錄redis中
7)啓動redis 在bin下執行命令redis-server redis.conf
8)如需遠程連接redis,需配置redis端口6379在linux防火牆中開發
/sbin/iptables -I INPUT -p tcp --dport 6379 -j ACCEPT
/etc/rc.d/init.d/iptables save
注意:啓動後看到歡迎界面,但是窗口不能關閉,且不能進行其他操作。解決方案是將redis.conf中的daemonize從false修改成true表示後臺啓動
使用命令查看6379端口是否啓動ps -ef | grep redis
二、在Java中使用Jedis操作redis
public void test2() {
//1、創建jedis的連接池需要先創建jedis的配置對象
JedisPoolConfig config = new JedisPoolConfig();
//對jedisPool進行配置
config.setMaxIdle(30);//設置最大閒置個數
config.setMinIdle(10);//設置最小閒置個數
config.setMaxTotal(50);//設置最大連接數
//創建redis的連接池對象
JedisPool pool = new JedisPool(config,"192.168.190.128",6379);
//2、獲取jedis連接對象
Jedis jedis = pool.getResource();
//3、存儲數據
jedis.set("xxx", "yyyyy");
System.out.println(jedis.get("xxx"));
//4、關閉連接
jedis.close();
pool.close();
}
三、redis的常用命令
存儲字符串類型
1、get key:獲取值
2、set key value:設置值
3、getset key value:先獲取值,再設置一個新值
4、incr key:自動增加(類似於++運算,只能是數值。如果該key沒有值,那麼自動創建一個值爲0的key,incr後變爲1)
5、decr key:自動減少
6、incrby key increment:自動增加(類似於+=運算)
7、decrby key decrement:自動減少(類似於-=運算)
8、append key value:如果該key存在,則在原有的value後追加該值;如果該 key不存在,則重新創建一個key/value 。返回該字符串的長度
9、del key:刪除該鍵值對
存儲hash類型
1、hset key field value:存儲key的一個field值
2、hget key field:獲取key下hash鍵爲field的值
3、hmset key field value field value... : 存儲key的多個field值
4、hmget key field field... : 獲取key的多個field值
5、hgetall key :獲取key下面的所有field和value
6、hdel key field : 刪除該key下面的field和對應的value
7、del key:刪除該key及下面所有value
8、hincrby key field increment:自動增加相應的值
9、hdecrby key field decrement:自動減少相應的值
10、hexists key field:判斷指定的key中field是否存在
11、hlen key:獲取key所包含的field數量
12、hkeys key:獲取key所有的field
13、hvalues key:獲取key所有的value
存儲list類型
這裏的list類型底層用的是linked鏈式存儲,增刪快,查詢慢。類似LinkedList,可在首尾進行操作。
1、lpush key values:從左邊向key中存放多個value的值,底層使用堆棧的方式進行壓棧,後進先出
2、rpush key values:從右邊向key中存放多個value的值,底層使用堆棧的方式進行壓棧,後進先出
3、lrange key start end:獲取鏈表從start到end位置的值,start和end可爲負數,-1表示最後一個,-2表示倒數第二個依次類推
4、lpop key:從該key下的左邊彈出一個value值
5、rpop key:從該key下的右邊彈出一個value值
6、llen key :返回該key的長度
7、lpushx key value:從左邊向key中存放多個value的值,如果沒有這個key,則不進行壓棧操作。一次只能壓一個數
8、lpushx key value:從右邊向key中存放多個value的值,如果沒有這個key,則不進行壓棧操作。一次只能壓一個數
9、lrem key count value:從左邊刪除count個值爲value的元素,如果count大於0,從頭向尾遍歷並刪除count個值爲value的元素,如果count小於0,則從尾向頭遍歷並刪除。如果count等於0,則刪除鏈表中所有等於value的元素。
10、lset key index value:設置鏈表中的index的腳標的元素值,0代表鏈表的頭元素,-1代表鏈表的尾元素。相當於替換功能。
11、linsert key before|after pivot value:在pivot元素前或者後插入value這個 元素。
12、rpoplpush resource destination:將resource鏈表的尾部彈出一個元素壓入destination鏈表的首部
存儲set類型
這裏的set類型底層使用與集合set相同,不能有重複數據,且沒有順序。Set類 型在功能上還存在着一個非常重要的特性,即在服務器端完成多個Sets之間的聚合計算操作,如unions、intersections和differences。
1、sadd key value1、value2…:向set中添加數據,如果該key的值已有則不會 重複添加
2、smembers key:顯示該key對應的set下的所有value
3、srem key value:移除該set下的value
4、sismember key value:判斷該set下是否存在value
5、sdiff key1 key2:返回key1與key2中相差的成員,相當於key1比key2多哪些值。這個值與命令中key的前後順序有關係。
6、sinter keys:返回多個set的交集
7、sunion keys:返回多個set的並集
8、scard key:返回該set的長度
9、srandmember key:返回該key對應set的隨機一個元素。
10、sinterstore destination key1 key2:取key1與key2的交集並存放到destination中
11、sunionstore destination key1 key2:返回key1與key2的並集並存放到destination中
12、sdiffstore destination key1 key2:將key1、key2相差的成員存儲在 destination上
存儲sortedset類型
存儲有順序的set根據權重進行排序(默認從小到大)。用於遊戲排名,微博熱點話題等。
1、zadd key score member score2 member2 ...:將所有成員以及該成員的分數(權重)存放到sorted-set中(從小到大的順序)
2、zcard key:獲取key中成員的數量(不包括權重)
3、zrange key start end [withscores]:顯示集合中的成員,可選項爲是否同時顯示權重。從小到大
4、zscore key member:返回指定成員的權重
5、zrem key members:移除該key下面的成員,可以多個。
6、zrevrange mysortset start end [withscores]:顯示集合中的成員,可選項爲是否同時顯示權重,順序是從大到小
7、zremrangebyrank key start end:從小到大刪除start到end角標的元素
8、zremrangebyscore key min max:通過權重的範圍進行元素的刪除。
9、zrangebyscore key min max [withscores] [limit offset count]:返回分數在[min,max]的成員並按照分數從低到高排序。[withscores]:顯示分數;[limit offset count]:offset,表明從腳標爲offset的元素開始並返回count個成員。
10、zcount key min max:統計權重在min到max範圍內的元素
11、zrank key member:返回成員在集合中的排名,從小到大
12、zrevrank key member:返回成員在集合中的排名,從大到小
13、zincrby key increment member:設置指定成員增加權重,返回值是更改後的權重。
keys的通用操作
1、keys pattern:獲取所有域pattern匹配的key,*表示任意多個字符,?表示任意一個字符。
2、del key1 key2:刪除指定的key,可以一次性刪除多個
3、exists key:判斷key是否存在,1代表存在,0代表不存在。
4、rename key newkey:給當前key重命名
5、expire key:設置過期時間。單位:秒
6、ttl key:獲取該key所剩的超時時間,如果沒有設置超時,返回-1,如果返回-2,表示超時,即不存在
7、type key:獲取key的類型。以字符串的格式返回。返回的字符串爲list、set、hash和zset。如果不存在返回none
redis是多數據庫的,有16個,下標從0到15,默認在第0個。可以使用select num 命令進入其他數據庫。使用move key 1:將當前庫的key移植到1號庫
* flush:刪除當前數據庫的所有key
* flushall:刪除所有數據庫的所有key
* dbsize:返回當前數據庫的key的數目
* info:獲取服務器的信息和統計
訂閱:被訂閱者發佈信息時可以接收到。
** subscribe channel:訂閱頻道
** psubscribe channel*:批量訂閱頻道
** publish channel content:在指定的頻道channel發送消息content
事物:事物中所有的命令都會被串行化的順序執行,事物執行期間,redis不會再爲其他客戶端的請求提供任何服務。相當於批量處理,開啓事物後可以多條一起執行或者一起回滾。不同於關係型數據庫的是,這裏某一條命令執行出錯對其他命令沒有絲毫影響。而關係型數據庫中出錯後都會進行回滾。
** multi:開啓事物,直到執行exec時,纔會去執行這些命令。類型關係型數據庫中的begin transaction
** exec:提交事物,相當於關係型數據庫中的commit
** discard:事物回滾,類似關係型數據庫中的rollback
redis持久化
redis的高性能是由於其將所有的數據都存儲在了內存中,爲了使redis在重啓之後仍能保證數據不丟失,需要將數據從內存中同步到硬盤中,這一過程就是持久化。
redis支持兩種持久化,一種是RDB方式,一種是AOF方式,可以單獨使用一種,也可以結合使用。
* RDB持久化(默認支持,無序配置)
該機制是指在指定的時間間隔內將內存中的數據集寫入磁盤。redis下的dump.rdb
優勢是非常簡單,性能最大化,而且因爲是快照,注重的是結果,如果數據很大,相比AOF機制,RDB的啓動效率會更高。
劣勢是可能會丟失數據,因爲快照會在某個時間點 進行存儲。兩個快照之間存在時間間隔,快照完成之後宕機,那麼快照之後的數據就不存在了。
* AOF持久化
AOF是將所有操作記錄到日誌文件中。重新加載某個數據時,需要按照當時操作一步一步來。
優勢是非常安全,數據是實時的。劣勢是如果某個數據操作次數過多,會造成redis卡慢。默認是關閉的。在redis.conf中配置。