1. 程式人生 > >學習總結-Redis

學習總結-Redis

jedis clu make 組件 rdb sin test 自動 數據類型

一,簡介

redis(Remote Dictionary Server)是一種Nosql技術,它是一個開源的高級kv存儲和數據結構存儲系統,它經常被拿來和Memcached相比較,但是Memcached不提供持久化的數據保存機制而redis可以將數據保存在磁盤中,redis不僅僅是能夠存儲key和value這種簡單的鍵值對,還能存儲例如集合、hash表、列表、字典等。redis在整個運行過程中,數據統統都是存儲在內存中的,因此,性能是相當高的,由於此特性,redis對於內存的要求比較高,它會周期性的將內存中的數據寫入在磁盤中,從而實現數據持久化的訪問能力,但是這種存儲只是保證redis在下次啟動還有數據可以讀取,而不是提供訪問。redis是單線程服務的,只有一個線程。redis還支持主從模式以及支持通過lua腳本去編寫擴展,並且支持高可用和分布式集群解決方案。

二,特點

1,運行在內存

2,持久化

3,主從(借助於sentinel實現一定意義上的HA)

4,Clustering(分布式存儲)

5,數據機構服務器:支持存儲string、list、hash、set、Sorted Set,Bitmap,HyperLoglogs

6,能夠作為隊列使用

三,Redis的組件

redis-server

redis-cli

redis-benchmark(壓測工具)

redis-check-dump && redis-check-aof 能夠去檢測文件是否損壞兩種格式RDB/AOF格式

四,redis

Linux上的安裝

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-redis-3.0.0中的redis.conf到安裝目錄redis的bin

技術分享圖片

技術分享圖片

7,啟動redis 在bin下執行命令redis-server redis.conf

技術分享圖片

後端啟動Redis:

修改redis.conf配置文件,daemonize yes 以後端模式啟動

技術分享圖片

啟動:

技術分享圖片

關閉redis:

技術分享圖片

或者

技術分享圖片

8,如需遠程連接redis,需配置redis端口6379在linux防火墻中開發

/sbin/iptables -I INPUT -p tcp --dport 6379 -j ACCEPT

/etc/rc.d/init.d/iptables save

技術分享圖片

技術分享圖片

五,jedis操作Redis

1,導入Jar

技術分享圖片

2,創建一個JedisTest類:

技術分享圖片

技術分享圖片

2jedis的連接池使用

技術分享圖片

技術分享圖片

六,Redis常用操作

redis是一種高級的key-value的存儲系統。

其中的key是字符串類型,盡可能滿足如下幾點:

1)key不要太長,最好不要操作1024個字節,這不僅會消耗內存還會降低查找 效率

2)key不要太短,如果太短會降低key的可讀性

3)在項目中,key最好有一個統一的命名規範(根據企業的需求)

其中value支持五種數據類型:

1)字符串型 string

2)字符串列表 lists

3)字符串集合 sets

4)有序字符串集合 sorted sets

5)哈希類型 hashs

1.存儲字符串string

字符串類型是Redis中最為基礎的數據存儲類型,它在Redis中是二進制安全的,這便意味著該類型可以接受任何格式的數據,如JPEG圖像數據或Json對象描述信息等。在Redis中字符串類型的Value最多可以容納的數據長度是512M

1

set key value 設定key持有指定的字符串value,如果該key存在則進行覆蓋操作。總是返回"OK

2

get key 獲取key的value。如果與該key關聯的value不是String類型,redis將返回錯誤信息,因為get命令只能用於獲取String value 如果該key不存在,返回null。

技術分享圖片

3

getset key value 先獲取該key的值,然後在設置該key的值。

技術分享圖片

4

del key 刪除指定key

技術分享圖片

5

incr key 將指定的key的value原子性的遞增1.如果該key不存在,其初始值為0,在incr之後其值為1。如果value的值不能轉成整型,如hello,該操作將執行失敗並返回相應的錯誤信息。

技術分享圖片

6

decr key 將指定的key的value原子性的遞減1.如果該key不存在,其初始值為0,在incr之後其值為-1。如果value的值不能轉成整型,如hello,該操作將執行失敗並返回相應的錯誤信息。

技術分享圖片

如果不是數字則報錯:

技術分享圖片

7

incrby key increment 將指定的key的value原子性增加increment,如果該key不存在,器初始值為0,在incrby之後,該值為increment。

如果該值不能轉成整型,如hello則失敗並返回錯誤信息

技術分享圖片

8

decrby key decrement 將指定的key的value原子性減少decrement,如果該key不存在,器初始值為0,在decrby之後,該值為decrement。如果該值不能轉成整型,如hello則失敗並返回錯誤信息

技術分享圖片

9

append key value(拼接字符串)如果該key存在,則在原有的value後追加該值;如果該key不存在,則重新創建一個key/value

技術分享圖片

2.存儲hash

Redis中的Hashe類型可以看成具有String Key和String Value的map容器。所以該類型非常適合於存儲值對象的信息。如Username、Password和Age等。如果Hash中包含很少的字段,那麽該類型的數據也將僅占用很少的磁盤空間。每一個Hash可以存儲4294967295個鍵值對。

技術分享圖片

1

hset key field value為指定的key設定field/value對( 值對)。

技術分享圖片

2

hgetall key獲取key中的所有filed-vaule

技術分享圖片

3

hget key field 返回指定的key中的field的值

技術分享圖片

4

hmset key fields 設置key中的多個filed/value

技術分享圖片

5

hmget key fields 獲取key中的多個filed的值

技術分享圖片

6

hdel key fields 刪除key中的多個filed的值

技術分享圖片

7

del key 刪除整個Hash

技術分享圖片

8

hexists key field 判斷指定的key中的filed是否存在

技術分享圖片

9

hlen key 獲取key所包含的field的數量

技術分享圖片

10

hincrby key field increment 設置key中filed的值增加increment,如:age增加20

技術分享圖片

11

hincrbyfloat key field increment 設置key中filed的值增加increment,如:age增加20.5

技術分享圖片

12

hkeys key 獲取所有的key

技術分享圖片

3.存儲List

Redis列表是簡單的字符串列表,按照插入順序排序。你可以添加一個元素導列表的頭部(左邊)或者尾部(右邊)

一個列表最多可以包含 232 - 1 個元素 (4294967295, 每個列表超過40億個元素)。

Redis列表命令:

序號

命令及描述

1

rpush key value 向列表右邊增加元素

技術分享圖片

2

rpush key value1 [value2] 向列表右邊增加一個或者多個元素

技術分享圖片

3

lrange key start stop 獲取列表中的某一片段,將返回start、stop之間的所有元素(包含兩端的元素),索引從0開始。索引可以是負數,如:"-1"代表最後邊的一個元素。

技術分享圖片

4

lpop key lpop命令從列表左邊彈出一個元素,返回彈出的內容

技術分享圖片

5

rpop key rpop命令從列表右邊彈出一個元素,返回彈出的內容

技術分享圖片

6

Llen key 獲取列表中的元素個數

技術分享圖片

7

Lrem key count value

Lrem 命令會刪除列表中前count個值為value的元素,返回實際刪除的元素個數。根據count值的不同,該命令的執行方式會有所不同:

當count>0時, Lrem 會從列表左邊開始刪除。

當count<0時, Lrem 會從列表後邊開始刪除。

當count=0時, Lrem 刪除所有值為value的元素。

技術分享圖片

8

Lindex key index 獲得指定索引的元素值

技術分享圖片

9

Lset key index value 設置指定索引的元素值

技術分享圖片

10

Ltrim key start stop 只保留列表指定片段

技術分享圖片

11

Linsert key before|after pivot value 向列表中插入元素

該命令首先會在列表中從左到右查找值為pivot的元素,然後根據第二個參數是BEFORE還是AFTER來決定將value插入到該元素的前面還是後面。

技術分享圖片

12

rpoplpush source destination移除列表的最後一個元素,並將該元素添加到另一個列表並返回

技術分享圖片

13

4.存儲Set

1

sadd key values 添加一個或者多個元素

技術分享圖片

2

srem key values 移除一個或者多個元素

技術分享圖片

3

smembers key 獲取所有的元素

技術分享圖片

4

sismember key value 判斷元素是否在集合中,存在返回1否則返回0

技術分享圖片

5

sdiff key1 key2 獲的屬於key1並且不屬於key2的元素構成的集合

技術分享圖片

6

sinter key1 key2 獲得屬於key1並且屬於key2的元素構成的集合

技術分享圖片

7

sunion key1 key2 獲得屬於key1或者屬於key2的元素構成的集合

技術分享圖片

8

scard key 獲得集合中的元素個數

技術分享圖片

9

spop key 從集合中彈出一個元素,由於集合是無序的,所有SPOP命令會從集合中隨機選擇一個元素彈出

技術分享圖片

10

5.存儲Sortedset

Sortedset又叫zset

Sortedset是有序集合,可排序的,但是唯一。

Sortedset和set的不同之處,是會給set中的元素添加一個分數,然後通過這個分數進行排序。

1

zadd key score member[score member…] 向有序集合中加入一個元素和該元素的分數,如果該元素已經存在則會用新的分數替換原有的分數。返回值是新加入到集合中的元素個數,不包含之前已經存在的元素。

技術分享圖片

2

zscore key member獲取元素的分數

技術分享圖片

3

zrem key member[member…]刪除一個或者多個成員,不存在的成員將被忽略。當key存在但不是有序集類型時,返回一個錯誤。

技術分享圖片

紅色框裏面是沒有的成員

4

獲得排名在某個範圍的元素列表

技術分享圖片

1)zrange key start stop 按照元素分數從小到大的順序返回索引從start到stop之間的所有元素(包含兩端的元素)

技術分享圖片

2)zrevrange key start stop 按照元素分數從大到小的順序返回索引從start到stop之間的所有元素(包含兩端的元素)

技術分享圖片

如果需要獲得元素的分數的可以在命令尾部加上WITHSCORES參數

技術分享圖片

5

獲取元素的排名(排名從0開始)

1)zrank key member 從小到大獲取排名

技術分享圖片

2)zrevrank key member 從大到小獲取排名

技術分享圖片

6

zrangebyscore key min max [withscores] [limit offset count] 獲得指定分數範圍的元素,如果需要獲得元素的分數的可以在命令尾部加上withscores參數 ,limit offset count 和mysql中的limit使用方式一樣

技術分享圖片

7

zincrby key increment member 增加某個元素的分數,返回值的更改後的分數

技術分享圖片

8

zcard key 獲得集合中元素的數量

技術分享圖片

9

zcount key min max 獲得指定分數範圍內的元素個數

技術分享圖片

10

zremrangebyrank key start stop 按照排名範圍刪除元素

技術分享圖片

11

zremrangebyscore key min max 按分數範圍刪除元素

技術分享圖片

12

6,redis常用命令

1

keys 返回滿足給定條件的所有key

技術分享圖片

2

exists 確認一個key是否存在

技術分享圖片

3

rename 從命名key

技術分享圖片

4

type 返回key的類型

技術分享圖片

5

設置key的生存時間

redis在實際使用過程中更多的用作緩存,然而緩存的數據一般都是需要設置生存時間的,即:到期後數據銷毀。

expire key seconds 設置key的生存時間(單位:秒)key在多少秒後會自動刪除

ttl key 查看key剩余的生存時間(返回-2表示已經刪除)

persist key 清除生存時間

pexpire key milliseconds 生存時間設置單位為:毫秒

技術分享圖片

學習總結-Redis