中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

redis實戰

發布時間:2020-04-01 00:20:27 來源:網絡 閱讀:487 作者:棲木之地 欄目:關系型數據庫

主要用作緩存功能,不用來做數據庫和消息服務器

單點服務器搭建

1:下載release包:
wget http://download.redis.io/releases/redis-4.0.11.tar.gz
解壓:tar -zxvf
2:進入目錄后編譯:make,需要安裝c:yum install gcc-c++
編譯時:jemalloc/jemalloc.h: No such file or directory
jemalloc重載了LInux的ANSI C的malloc和free函數:make的時候指定參數:
make MALLOC=libc
編譯后文件都在src中
3:啟動服務器:
src/redis-server
4:連接服務器:src/redis-cli

集群搭建

使用的是4.0以上的環境,利用自帶的ruby腳本搭建redis cluster,需要至少6個節點,三主三從
1:分別在多個節點上安裝單服務器,然后修改redis.conf文件
最小化配置:
port 7000
cluster-enabled yes
cluster-config-file nodes.conf //啟動的時候會由redis生成和管理
cluster-node-timeout 5000
appendonly yes
bind 10.99.32.16 //需要綁定自己節點的ip,否則外部不能訪問
2:啟動時使用src/redis-server ./redis.conf
多臺實例分別啟動
3:如果已經安裝ruby則不需要執行這一步
安裝ruby的過程:
下載release包:
wget https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.1.tar.gz
解壓,./configure && make && make install
安裝完畢后即可以使用gem install redis
安裝過程可能會報錯,自行解決。
4:src/redis-trib.rb create --replicas 1 10.99.32.16:6379 10.99.32.17:6379 10.99.32.18:6379 10.99.32.20:6379 10.99.32.22:6379 10.99.32.23:6379
最少需要6個節點
出現[OK] All 16384 slots covered.即為成功
5:追加新節點
1:先啟動節點實例
2:使用redis-trib.rb
./redis-trib.rb add-node myNewNodeIp:port
追加副本節點:
./redis-trib.rb add-node --slave 127.0.0.1:7006 127.0.0.1:7000
給新副本節點指定master節點:
./redis-trib.rb add-node --slave --master-id 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e 127.0.0.1:7006 127.0.0.1:7000
6:移除節點
./redis-trib del-node myip:port mynodeId

一些概念

集群端口:
每一個redis集群節點需要開啟兩個tcp連接。一個是客戶端連接,例如默認6379,plus端口通過增加10000來獲取數據端口,例如16379
另一個端口是集群總線,這是節點對節點的通信通道,使用二進制傳輸協議。節點通過集群總線來偵測故障,配置更新和故障轉移授權和更多。客戶端不應該使用集群總線端口進行通信,但可以使用redis命令端口。

集群數據分片:把數據分散到各個節點進行保存。redis集群不會使用始終如一的hashing,但每個分片一個key的形式,稱之為hash slot。redis有16384個hash slot,并且計算出hash slot的key。例如有3個節點
NodeA包含 hash slot 0-5500
NodeB包含5501-11000
NodeC包含11011-16383

redis cluster不保證強一致性

直接運行redis服務器時會在前端運行,如果需要在后臺運行:
后臺運行redis:把配置文件redis.conf的 daemonize改成yes

-
配置集群時,如果出現卡著一直不懂,可能之前配置過一些節點,關閉了再重新運行腳本。如果運行腳本報:Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in databas
解決:刪除appendonly.aof文件和nodes.conf文件

-
緩存key的設計:
1:最長是1024字節,不要太長,不要太短,key比對耗時
2:使用schema來標識,例如com.payment.User:id
二進制安全字符:不會解析一些特殊字符,例如轉義符號等
Redis key:是二進制安全的,這意味著你可以使用任意二進制序列作為一個key,從一個字符串像foo到一個jpeg文件的內容。空字符串同樣是合法的key
key的少量其他規則:
1:非常長的key不是一個好主意,1024byte的key不好
2:太短的key也不好

數據類型

數據類型:
String:最基礎的數據類型,是二進制安全的,意味著,Redis字符串可以包含任何類型的數據,
一個String值可以最大512M
1:可以使用String作為原子計數器,使用INCR,DECR,INCRBY
2:字符串追加,使用APPEND命令
3:使用字符串作為隨機訪問vector
4:對大量數據進行編碼,壓縮進小空間

List:按插入順序排序。頭部或者尾部tail,left或者right
list最大長度是2的32次方-1
redis的list主要的功能是支持常量時間插入和刪除頭部和尾部的元素。即使很多插入的數據
訪問兩端的元素是非常快速的,但如果想訪問中間的元素會很慢,是O(N)的操作。
主要用途:
1:建立社交網絡時間軸模型,使用lpush插入,然后使用lrange來獲取少量最近插入的數據
2:可以使用lpush和ltrim來創建一個永遠不會超出給定數量的list,但要記住最新的N個元素。
3:list可以用來作為原始消息傳遞
4:可以做大量內容

set:不排序的字符串集合,執行O(1)。
Redis Set不允許重復的成員,添加相同的成員會導致有一個獨立的副本。實際上著意味著添加成員不需要檢查是否已經存在。
可以在服務器端做聯合操作
set的長度是2的32次方-1
主要用途:
1:可以跟蹤唯一內容,例如想要知道所有帖子的唯一ip地址,簡單地使用SADD來處理一個頁面,這樣可以確保沒有重復的ip唄添加
2:能夠很好地標識關聯關系。可以創建一個標簽系統。這樣可以添加所有有指定標簽的對象的id到集合中。
3:可以使用set來抽取元素,spop,srandmember

hash:一個map類型,字段和值,用來表示對象,例如user:1 userObj
一個帶有少量字段的hash可以使用很少的空間來存儲。,因此可以存儲百萬級對象在一個很小的redis實例中。hash主要用來標識對象,他們能存儲許多元素,因此你可能夠使用hash來保存其他內容
每個hashkey存儲2的32次方-1個key-value對,多于4億對

持久化

redis提供持久化選項:
1:RDB:執行某個時間點的快照
2:AOF:記錄所有服務器收到的寫操作,可以在服務器重啟的時候重新執行,構造原始的數據集。使用追加方式。redis能夠在日志很大的時候在后臺重寫。
3:可以禁止持久化,數據只在服務器運行的時候存在
4:在同一個實例中組合AOF,RDB。在這種情況下,當redis重新啟動,AOF文件就會被用來構造原始數據,

RDB優點:
1:RDB是一個非常緊湊的獨立文件,代表redis某個時間點的數據。rdb文件優先用來做備份。例如,你可以每小時壓縮你的RDB文件,然后每天保存一個RDB的快照。這樣可以很容易恢復不同版本的數據。
2:RDB是一個非常好的災難恢復,作為單獨的壓縮文件,可以傳輸到數據中心
3:RDB最大化redis的性能,因為redis父進程只需要進行分配,而子進程則完成其余的內容。
4:RDB允許快速啟動,而AOF則不能

RDB缺點:
1:如果需要盡可能少的數據丟失,RDB不是一個好的方式。你需要配置很多個保存點才能保證數據少丟失。
2:RDB需要經常fork來使子進程能夠進行持久化數據。

AOF優點:
1:使用AOF,redis更持久化,可以使用不同的fsync策略。使用這些fsync策略,每秒寫執行都會在一個后臺程序中保存。
2:AOF是一個僅追加日志
3:redis能夠在AOF文件過大的時候自動重寫,重寫是安全的。
4:AOF包含了所有操作的日志

AOF缺點:
1:AOF文件比RDB文件大
2:AOF比RDB慢,fsync策略會每秒執行一次記錄
3:bug

分布式唯一ID

采用41bit存放時間:精確到毫秒
12bit存放節點分片的ID:最大值為4095
10bit存放自增ID:
比如GTM時間 Fri Mar 13 10:00:00 CST 2015 ,它的距1970年的毫秒數是 1426212000000,假定分片ID是53,自增長序列是4,則生成的ID是:
5981966696448054276 = 1426212000000 << 22 + 53 << 10 + 4

結合spring進行緩存操作

spring boot里面使用的是Lettuce客戶端連接
1:引入依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2:配置redis服務器
spring.redis.host=redis-cs
spring.redis.port=6379
spring.redis.timeout=60000
這里是簡單的配置,還可以配置連接密碼
3:配置連接工廠


@Resource
private LettuceConnectionFactory myLettuceConnectionFactory;
@Bean
    public RedisTemplate<String, Serializable> redisTemplate() {
            RedisTemplate<String, Serializable> template = new RedisTemplate<>();
            template.setKeySerializer(new StringRedisSerializer());
            template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
            template.setConnectionFactory(myLettuceConnectionFactory);
            return template;
}

4:注入RedisTemplate

@Autowired
private RedisTemplate<String, String> redisTemplate;

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

安吉县| 绥棱县| 青田县| 宣汉县| 勃利县| 抚宁县| 基隆市| 工布江达县| 伽师县| 永兴县| 新河县| 温宿县| 宁都县| 万全县| 什邡市| 和龙市| 白河县| 常熟市| 东兴市| 平罗县| 巴林左旗| 宁远县| 榆林市| 长乐市| 天等县| 比如县| 班玛县| 九龙县| 内江市| 高青县| 天长市| 交城县| 尉犁县| 唐河县| 九台市| 安国市| 常德市| 苏尼特右旗| 莫力| 建始县| 宝应县|