redis簡(jiǎn)單介紹及安裝使用小結(jié)
一:redis介紹
Redis和Memcached類似,也屬于k-v數(shù)據(jù)存儲(chǔ)
Redis官網(wǎng)redis.io, 當(dāng)前最新穩(wěn)定版4.0.1
支持更多value類型,除了和string外,還支持hash、lists(鏈表)、sets(集合)和sorted sets(有序集合)
redis使用了兩種文件格式:全量數(shù)據(jù)(RDB)和增量請(qǐng)求(aof)。全量數(shù)據(jù)格式是把內(nèi)存中的數(shù)據(jù)寫(xiě)入磁盤,便于下次讀取文件進(jìn)行加載。增量請(qǐng)求文件則是把內(nèi)存中的數(shù)據(jù)序列化為操作請(qǐng)求,用于讀取文件進(jìn)行replay得到數(shù)據(jù),這種類似于mysql binlog。
redis的存儲(chǔ)分為內(nèi)存存儲(chǔ)、磁盤存儲(chǔ)和log文件三部分
二:redis安裝
下載最新穩(wěn)定版
cd /usr/local/src/ wget http://download.redis.io/releases/redis-4.0.1.tar.gz cd redis-4.0.1 make && make install cp redis.conf /etc/redis.conf vim /etc/redis.conf //修改如下配置 daemonize yes logfile "/var/log/redis.log" dir /data/redis_data/ appendonly yes mkdir /data/redis_data sysctl vm.overcommit_memory=1 echo never > /sys/kernel/mm/transparent_hugepage/enabled redis-server /etc/redis.conf
三:redis持久化
Redis提供了兩種持久化的方式,分別是RDB(Redis DataBase)和AOF(Append Only File)
RDB,簡(jiǎn)而言之,就是在不同的時(shí)間點(diǎn),將redis存儲(chǔ)的數(shù)據(jù)生成快照并存儲(chǔ)到磁盤等介質(zhì)上。
AOF,則是換了一個(gè)角度來(lái)實(shí)現(xiàn)持久化,那就是將redis執(zhí)行過(guò)的所有寫(xiě)指令記錄下來(lái),在下次redis重新啟動(dòng)時(shí),只要把這些寫(xiě)指令從前到后再重復(fù)執(zhí)行一遍,就可以實(shí)現(xiàn)數(shù)據(jù)恢復(fù)了。
其實(shí)RDB和AOF兩種方式也可以同時(shí)使用,在這種情況下,如果redis重啟的話,則會(huì)優(yōu)先采用AOF方式來(lái)進(jìn)行數(shù)據(jù)恢復(fù),這是因?yàn)锳OF方式的數(shù)據(jù)恢復(fù)完整度更高。
如果你沒(méi)有數(shù)據(jù)持久化的需求,也完全可以關(guān)閉RDB和AOF方式,這樣的話,redis將變成一個(gè)純內(nèi)存數(shù)據(jù)庫(kù),就像memcache一樣。
Redis持久化相關(guān)參數(shù)
save 900 1 #表示每15分鐘且至少有1個(gè)key改變,就觸發(fā)一次持久化
save 300 10 #表示每5分鐘且至少有10個(gè)key改變,就觸發(fā)一次持久化
save 60 10000 #表示每60秒至少有10000個(gè)key改變,就觸發(fā)一次持久
save “” #這樣可以禁用rdb持久化
appendonly yes #如果是yes,則開(kāi)啟aof持久化
appendfilename “appendonly.aof” # 指定aof文件名字
appendfsync everysec #指定fsync()調(diào)用模式,有三種no(不調(diào)用fsync),always(每次寫(xiě)都會(huì)調(diào)用fsync),everysec(每秒鐘調(diào)用一次fsync)。第一種最快,第二種數(shù)據(jù)最安全,但性能會(huì)差一些,第三種為這種方案,默認(rèn)為第三種。
四:redis數(shù)據(jù)類型
Redis數(shù)據(jù)類型-string
string為最簡(jiǎn)單的類型,與Memcached一樣的類型,一個(gè)key對(duì)應(yīng)一個(gè)value,其支持的操作與Memcached的操作類似,它的功能更豐富。設(shè)置可以存二進(jìn)制的對(duì)象。
示例:
#redis-cli 127.0.0.1:6379> set mykey "aminglinux.com" OK 127.0.0.1:6379> get mykey "aminglinux.com" 127.0.0.1:6379> mset key1 1 key2 a key3 c 127.0.0.1:6379> mget key1 key2 key3 1) "1" 2) "a" 3) "c"
Redis數(shù)據(jù)類型-list
list是一個(gè)鏈表結(jié)構(gòu),主要功能是push、pop、獲取一個(gè)范圍的所有值等等。操作中key理解為鏈表的名字。
使用 list 結(jié)構(gòu),我們可以輕松地實(shí)現(xiàn)最新消息排行等功能(比如新浪微博的 TimeLine )。list 的另一個(gè)應(yīng)用就是消息隊(duì)列,可以利用 list 的 push操作,將任務(wù)存在 list 中,然后工作線程再用pop操作將任務(wù)取出進(jìn)行執(zhí)行。
示例:
#redis-cli 127.0.0.1:6379> LPUSH list1 "aminglinux" 127.0.0.1:6379> LPUSH list1 "1 2 3" 127.0.0.1:6379> LPUSH list1 "aaa bbb“ 127.0.0.1:6379> LRANGE list1 0 -1 1) "aaa bbb" 2) "1 2 3" 3) "aminglinux“ 127.0.0.1:6379> LPOP list1
Redis數(shù)據(jù)類型-set
set是集合,和我們數(shù)學(xué)中的集合概念相似,對(duì)集合的操作有添加刪除元素,有對(duì)多個(gè)集合求交并差等操作。操作中key理解為集合的名字。比如在微博應(yīng)用中,可以將一個(gè)用戶所有的關(guān)注人存在一個(gè)集合中,將其所有粉絲存在一個(gè)集合。因?yàn)?Redis 非常人性化的為集合提供了求交集、并集、差集等操作,那么就可以非常方便的實(shí)現(xiàn)如共同關(guān)注、共同喜好、二度好友等功能,對(duì)上面的所有集合操作,你還可以使用不同的命令選擇將結(jié)果返回給客戶端還是存集到一個(gè)新的集合中。
set示例
127.0.0.1:6379> SADD set1 a 127.0.0.1:6379> SADD set1 b 127.0.0.1:6379> SADD set1 c 127.0.0.1:6379> SADD set1 d 127.0.0.1:6379> SMEMBERS set1 1) "d" 2) "b" 3) "a" 4) "c" 127.0.0.1:6379> SREM set1 c//刪除元素 127.0.0.1:6379> SADD set2 a 2 b 127.0.0.1:6379> SINTER set1 set2 //交集 127.0.0.1:6379> SUNION set1 set2 //并集 127.0.0.1:6379> SDIFF set1 set2 //差集
Redis數(shù)據(jù)類型-sort set
sorted set是有序集合,它比set多了一個(gè)權(quán)重參數(shù)score,使得集合中的元素能夠按 score 進(jìn)行有序排列,比如一個(gè)存儲(chǔ)全班同學(xué)成績(jī)的 Sorted Sets,其集合 value 可以是同學(xué)的學(xué)號(hào),而 score 就可以是其考試得分,這樣在數(shù)據(jù)插入集合的時(shí)候,就已經(jīng)進(jìn)行了天然的排序。
127.0.0.1:6379> ZADD set3 12 abc 127.0.0.1:6379> ZADD set3 2 "cde 123" 127.0.0.1:6379> ZADD set3 24 "123-aaa" 127.0.0.1:6379> ZADD set3 4 "a123a" 127.0.0.1:6379> ZRANGE set3 0 -1 1) "cde 123" 2) "a123a" 3) "abc" 4) "123-aaa"
倒序
127.0.0.1:6379> ZREVRANGE set3 0 -1
1) "123-aaa"
2) "abc"
3) "a123a"
4) "cde 123"
Redis數(shù)據(jù)類型-hash
在 Memcached 中,我們經(jīng)常將一些結(jié)構(gòu)化的信息打包成 hashmap,在客戶端序列化后存儲(chǔ)為一個(gè)字符串的值(一般是 JSON 格式),比如用戶的昵稱、年齡、性別、積分等。
示例
127.0.0.1:6379> hset hash1 name aming 127.0.0.1:6379> hget hash1 name "aming" 127.0.0.1:6379> hset hash1 age 30 127.0.0.1:6379> hget hash1 age "30" 127.0.0.1:6379> hgetall hash1 1) "name" 2) "aming" 3) "age" 4) "30"
相關(guān)文章
RedisTemplate 實(shí)現(xiàn)基于Value 操作的簡(jiǎn)易鎖機(jī)制(示例代碼)
本文將介紹如何使用 RedisTemplate 的 opsForValue().setIfAbsent() 方法來(lái)實(shí)現(xiàn)一種簡(jiǎn)單的鎖機(jī)制,并提供一個(gè)示例代碼,展示如何在 Java 應(yīng)用中利用這一機(jī)制來(lái)保護(hù)共享資源的訪問(wèn),感興趣的朋友跟隨小編一起看看吧2024-05-05Redis使用bloom-filter過(guò)濾器實(shí)現(xiàn)推薦去重
這篇文章主要介紹了Redis使用bloom-filter過(guò)濾器實(shí)現(xiàn)推薦去重,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11Redis 使用跳表實(shí)現(xiàn)有序集合的方法
Redis有序集合底層為什么使用跳表而非其他數(shù)據(jù)結(jié)構(gòu)如平衡樹(shù)、紅黑樹(shù)或B+樹(shù)的原因在于其特殊的設(shè)計(jì)和應(yīng)用場(chǎng)景,跳表提供了與平衡樹(shù)類似的效率,同時(shí)實(shí)現(xiàn)更簡(jiǎn)單,調(diào)試和修改也更加容易,感興趣的朋友一起看看吧2024-09-09聊一聊redis奇葩數(shù)據(jù)類型與集群知識(shí)
現(xiàn)在越來(lái)越多的項(xiàng)目都會(huì)利用到redis,多實(shí)例redis服務(wù)比單實(shí)例要復(fù)雜的多,這里面涉及到定位、容錯(cuò)、擴(kuò)容等技術(shù)問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于redis奇葩數(shù)據(jù)類型與集群知識(shí)的相關(guān)資料,需要的朋友可以參考下2022-01-01Redis實(shí)現(xiàn)編碼生成規(guī)則方式
在自動(dòng)生成編碼時(shí)應(yīng)采用“MD+年月日+4位序列號(hào)”的規(guī)則,如“MD202310130001”,為避免使用隨機(jī)序列號(hào)導(dǎo)致的重復(fù)編碼,建議使用從0開(kāi)始的自增序列號(hào),此外,使用Redis的incrBy功能實(shí)現(xiàn)序列號(hào)自增,可以有效提高效率和降低實(shí)現(xiàn)難度2023-01-01redis的hGetAll函數(shù)的性能問(wèn)題(記Redis那坑人的HGETALL)
這篇文章主要介紹了redis的hGetAll函數(shù)的性能問(wèn)題,需要的朋友可以參考下2016-02-02redis中hash數(shù)據(jù)結(jié)構(gòu)及說(shuō)明
這篇文章主要介紹了redis中hash數(shù)據(jù)結(jié)構(gòu)及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01Redis常見(jiàn)限流算法原理及實(shí)現(xiàn)
這篇文章主要介紹了Redis常見(jiàn)限流算法原理及實(shí)現(xiàn),限流簡(jiǎn)稱流量限速(Rate?Limit)是指只允許指定的事件進(jìn)入系統(tǒng),超過(guò)的部分將被拒絕服務(wù)、排隊(duì)或等待、降級(jí)等處理2022-08-08巧用Redis實(shí)現(xiàn)分布式鎖詳細(xì)介紹
大家好,本篇文章主要講的是巧用Redis實(shí)現(xiàn)分布式鎖詳細(xì)介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12