學習總結-Redis
一,簡介
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在
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類:
2,jedis的連接池使用
六,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