【我的javaEE學習】redis的簡單入門

四月份學習的redis,雖然我個人認爲應該分到數據庫裏,但是我學習他的目的,主要是爲了JAVAEE開發,所以我繼續歸類到這個類裏。redis的環境我是搭建在自己的特惠買的阿里雲服務器上,自學的入門教程,如有問題歡迎指出,彼此交流。

1.redis在linux上的安裝

1.1安裝redis編譯的C環境,如果不安裝的話,後面編譯redis的環境會有報錯。命令如下”yum install gcc-c++”
1.2將redis的壓縮安裝包上傳到linux服務器並解壓到/usr/local目錄下。命令如下”tar -xvf redis-x.x.x.tar.gz -C /usr/local”
1.3進入redis-X.X.X目錄,使用”make”命令編譯redis

1.4在redis-X.X.X目錄中使用”make PREFIX=/usr/local/redis install”的命令安裝redis到/usr/local/redis中

1.5啓動redis(啓動命令爲./redis-server)

1.6拷貝redis-X.X.X中的redis.conf到安裝目錄redis中,redis.conf可以視爲啓動的配置文件。命令如下” cp redis.conf ../redis/bin/”

1.7編輯redis.conf爲自動後臺運行。命令如下”vi redis.conf”修改 daemonize由no爲yes

1.8啓動redisbin下。命令如下”./redis-server redis.conf”

關閉redis服務,殺進程:


或者


1.8把redis的端口號增加到防火牆裏,不同產品增加到防火牆的方式不同。命令如下”/sbin/iptables -I INPUT -p tcp --dport 6379 -j ACCEPT”;同時永久保存到防火牆裏,命令如下”/etc/rc.d/init.d/iptables save”


2.RedisJava的連接

2.1 需要的架包:commons-pool.jar和jedis.jar兩個架包

2.2 單實例連接

2.3 連接池連接


3.Redis的數據結構

3.1 五種數據結構:

    字符串(String)、哈希(hash)、字符串列表(list)字符串集合(set)有序字符串集合(sorted set),空爲nil

關於key的要求:key不要太長,超過1024個字節,也不要太短。

⑴字符串(String)

  最基礎和最重要的存儲數據類型。在redis裏是二進制安全的,意味着該數據類型存入和獲取的數據相同。在redis中字符串value最大長度是512M。

  其中存用set,取用get,先取再改getset,刪用del,數值增減(增用incr,減用decr),還有關於原子性增減incrby和decrby,以及追加字符串



⑵哈希(hash)

   Hash類型可以看成類似JAVA裏的map容器,用於存儲值對象的信息。如果Hash包含很少的字段,該類型也會佔用很少的磁盤空間。每一個Hash可以存儲4294967295個鍵值對。存儲結構如下圖:

 

  hset,取hget,存多個hmset,取多個hmget,取全部hmget等等

 

 

 

 

 

⑶字符串列表(list)

Redis中,List類型是按插入順序排序的字符串鏈表。和數據結構中的普通鏈表一樣,我們可以在其頭部(left)和尾部(right)添加新的元素。在插入時,如果該鍵並不存在,Redis將爲該鍵創建一個新的鏈表。與此相反,如果鏈表中所有的元素均被移除,那麼該鍵也將會被從數據庫中刪除。List中可以包含的最大元素數量是4294967295

   從元素插入和刪除的效率視角來看,如果我們是在鏈表的兩頭插入或刪除元素,這是非常高效的操作,即使鏈表中已經存儲了百萬條記錄,該操作也可以在常量時間內完成。然而,如果元素插入或刪除是作用於鏈表中間,那將會是非常低效。

1)lpush key value1 value2...:在指定的key所關聯的list的頭部插入所有的 values,如果該key不存在,該命令在插入的之前創建一個與該key關聯的空鏈 表,之後再向該鏈表的頭部插入數據。插入成功,返回元素的個數。

2)rpush key value1value2:在該list的尾部添加元素

3) lrange key start end:獲取鏈表中從startend的元素的值,startend

爲負數,若爲-1則表示鏈表尾部的元素,-2則表示倒數第二個,依次類推… 

4)lpushx key value:僅當參數中指定的key存在時(如果與key管理的list中沒 有值時,則該key是不存在的)在指定的key所關聯的list的頭部插入value

5rpushx key value:在該list的尾部添加元素


6lpop key:返回並彈出指定的key關聯的鏈表中的第一個元素,即頭部元素。

7rpop key:從尾部彈出元素。

8rpoplpush resource destination:將鏈表中的尾部元素彈出並添加到頭部

9llen key:返回指定的key關聯的鏈表中的元素的數量。

10lset key index value:設置鏈表中的index的腳標的元素值,0代表鏈表的頭元 素,-1代表鏈表的尾元素。


11lrem key count value:刪除count個值爲value的元素,如果count大於0,從頭向尾遍歷並刪除count個值爲value的元素,如果count小於0,則從尾向頭遍歷並刪除。如果count等於0,則刪除鏈表中所有等於value的元素。


12linsert key before|after pivot value:在pivot元素前或者後插入value這個 元素。





⑷字符串集合(set)

Redis中,我們可以將Set類型看作爲沒有排序的字符集合,和List類型一樣,我 們也可以在該類型的數據值上執行添加、刪除或判斷某一元素是否存在等操作。需要 說明的是,這些操作的時間是常量時間。Set可包含的最大元素數是4294967295

List類型不同的是,Set集合中不允許出現重複的元素。和List類型相比,Set 型在功能上還存在着一個非常重要的特性,即在服務器端完成多個Sets之間的聚合計 算操作,如unionsintersectionsdifferences。由於這些操作均在服務端完成,因此效率極高,而且也節省了大量的網絡IO開銷

1sadd key value1value2…:向set中添加數據,如果該key的值已有則不會重複添加

2smembers key:獲取set中所有的成員

3scard key:獲取set中成員的數量

4sismember key member:判斷參數中指定的成員是否在該set中,1表示存   在,0表示不存在或者該key本身就不存在

5srem key member1member2…:刪除set中指定的成員

 6srandmember key:隨機返回set中的一個成員

7sdiff sdiff key1 key2:返回key1key2中相差的成員,而且與key的順序有關。即返回差集。

8sdiffstore destination key1 key2:key1key2相差成員存儲在destination


9sinter key[key1,key2]:返回交集。

10sinterstore destination key1 key2:將返回的交集存儲在destination

11sunion key1key2:返回並集。

12sunionstore destination key1 key2:將返回的並集存儲在destination


⑸有序字符串集合(sorted set)

Sorted-SetsSets類型極爲相似,它們都是字符串的集合,都不允許重複的成員出現在一個Set中。它們之間的主要差別是Sorted-Sets中的每一個成員都會有一個分 (score)與之關聯,Redis正是通過分數來爲集合中的成員進行從小到大的排序。然而需要額外指出的是,儘管Sorted-Sets中的成員必須是唯一的,但是分數(score) 卻是可以重複的。

Sorted-Set中添加、刪除或更新一個成員都是非常快速的操作,其時間複雜度爲 集合中成員數量的對數。由於Sorted-Sets中的成員在集合中的位置是有序的,因此,即便是訪問位於集合中部的成員也仍然是非常高效的。事實上,Redis所具有的這一特徵在很多其它類型的數據庫中是很難實現的,換句話說,在該點上要想達到和Redis同樣的高效,在其它數據庫中進行建模是非常困難的。

例如:遊戲排名、微博熱點話題等使用場景。

1zadd key score member score2 member2 :將所有成員以及該成員的分數存放到sorted-set

2zcard key:獲取集合中的成員數量

3zcount key min max:獲取分數在[min,max]之間的成員

lzincrby key increment member:設置指定成員的增加的分數。

lzrange key start end [withscores]:獲取集合中腳標爲start-end的成員,[withscores]參數表明返回的成員包含其分數。

lzrangebyscore key min max [withscores] [limit offset count]:返回分數在[min,max]的成員並按照分數從低到高排序。[withscores]:顯示分數;[limit offset count]offset,表明從腳標爲offset的元素開始並返回count個成員。

lzrank key member:返回成員在集合中的位置。

lzrem key member[member]:移除集合中指定的成員,可以指定多個成員。

lzscore key member:返回指定成員的分數


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章