redis學習筆記

一、在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中配置。











發佈了40 篇原創文章 · 獲贊 22 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章