Redis高級

Redis高級

事務(wù)

redis事務(wù)本質(zhì):一組命令的集合项乒,一個事務(wù)的所有命令都會被序列化,在事務(wù)執(zhí)行的過程中葵蒂,會按照順序執(zhí)行

一次性交播、順序性、排他性

redis的事務(wù)沒有隔離級別的概念

所有的命令在事務(wù)中践付,并沒有直接被執(zhí)行秦士,只有發(fā)起執(zhí)行命令才會被執(zhí)行

redis單條命令是保存原子性的,但是事務(wù)不保證原子性

redis的事務(wù)執(zhí)行:

  1. 開啟事務(wù)(multi)

  2. 命令入隊

  3. 執(zhí)行事務(wù)(exec)

放棄事務(wù)的命令為:discard

事務(wù)異常:

1永高、編譯型異常(代碼有問題隧土,命令有錯):事務(wù)中所有的命令都不會被執(zhí)行

2、運行時異常:如果事務(wù)隊列存在語法性乏梁,那么執(zhí)行命令的時候次洼,其他命令可以正常執(zhí)行关贵,錯誤命令拋出異常

監(jiān)控

悲觀鎖

  • 悲觀遇骑,認為什么時候都會出問題,無論做什么都會加鎖

樂觀鎖

  • 樂觀揖曾,認為什么時候都不會出現(xiàn)問題落萎,所以不會加鎖亥啦。更新數(shù)據(jù)的時候去判斷,在此期間是否有人修改這個數(shù)據(jù)
  • 獲取version
  • 更新的時候比較version

監(jiān)視對象使用 watch [key] 解鎖使用 unwatch

#shell1
127.0.0.1:6379> set money 200
OK
127.0.0.1:6379> set out 0
OK
127.0.0.1:6379> watch money #監(jiān)視money
OK
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> decrby money 10
QUEUED
127.0.0.1:6379> incrby out 10
QUEUED
127.0.0.1:6379> exec #執(zhí)行失敗
(nil)
#shell2
127.0.0.1:6379> get money
"200"
127.0.0.1:6379> set money 1000 #另外一個線程修改了元素
OK

Jedis

public class JedisTest {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("127.0.0.1",6379);
        System.out.println(jedis.ping());
    }
}

SpringBoot使用redis

SpringBoot2.x之后练链,把jedis換成了lettuce

jedis:采用的直連翔脱,多個線程操作,不安全媒鼓,如果想要避免不安全届吁,需要使用jedis pool連接池(bio)

lettuce:采用netty,實例可以在多個線程內(nèi)共享绿鸣,不存在線程不安全的情況(nio)

spring:
  redis:
    host: 127.0.0.1
    database: 0
    port: 6379
@Autowired
private RedisTemplate redisTemplate;//操作不同的數(shù)據(jù)類型

@Test
void contextLoads() {
  RedisConnection connection = redisTemplate.getConnectionFactory().getConnection();
  connection.flushDb();
  redisTemplate.opsForValue().set("k1","v1");
  System.out.println(redisTemplate.opsForValue().get("k1"));
}

@Test
void redisTest() throws JsonProcessingException {
  User user = new User("張三", 2);
//String jsonUser = new ObjectMapper().writeValueAsString(user);
  redisTemplate.opsForValue().set("user",user);
  System.out.println(redisTemplate.opsForValue().get("user"));
}

配置序列化配置類

@Configuration
public class RedisConfig {

  @Bean
  public RedisTemplate<String,Object> redisTemplate (RedisConnectionFactory redisConnectionFactory)throws UnknownHostException {

    RedisTemplate<String,Object> template = new RedisTemplate<>();
    template.setConnectionFactory(redisConnectionFactory);

    //配置jackson序列化
    Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
    ObjectMapper om = new ObjectMapper();
    om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
    om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
    jackson2JsonRedisSerializer.setObjectMapper(om);

    //配置String序列化
    StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();

    //使key和hashkey使用String序列化
    template.setKeySerializer(stringRedisSerializer);
    template.setHashKeySerializer(stringRedisSerializer);

    //使value和hashvalue使用json序列化
    template.setValueSerializer(jackson2JsonRedisSerializer);
    template.setHashValueSerializer(jackson2JsonRedisSerializer);

    template.afterPropertiesSet();


    return template;
  }
}

redis.conf配置

1疚沐、單位 redis中對大小寫不敏感

2、可以包含其他配置文件

3潮模、網(wǎng)絡(luò)

#綁定ip
bind 127.0.0.1
#保護模式
protected-mode yes
#端口設(shè)置
port 6379

4亮蛔、通用配置

#以守護進程的方式運行,默認為no
daemonize yes
#如果以后臺方式運行擎厢,需要指定一個pid文件
/var/run/redis_6379.pid

#日志
# Specify the server verbosity level.
# This can be one of:
# debug (a lot of information, useful for development/testing)
# verbose (many rarely useful info, but not a mess like the debug level)
# notice (moderately verbose, what you want in production probably) 生產(chǎn)環(huán)境
# warning (only very important / critical messages are logged)
loglevel notice
#日志的輸出位置及文件名
logfile 
#數(shù)據(jù)庫數(shù)量 默認16個
database 16
#是否總是顯示logo
always-show-logo yes

5究流、快照

持久化,在規(guī)定的時間內(nèi)动遭,執(zhí)行了多少次操作芬探,則會持久化到 .rdb .aof

redis是內(nèi)存數(shù)據(jù)庫,沒有持久化厘惦,數(shù)據(jù)斷電即失

# 如果900s內(nèi) 至少有 1 key進行了修改灯节,就進行持久化操作
save 900 1
# 如果300s內(nèi) 至少有 10 key進行了修改,就進行持久化操作
save 300 10 
# 如果60s內(nèi) 至少有 10000 key進行了修改绵估,就進行持久化操作
save 60 10000
# 之后的持久化會自定義測試

# 持久化出現(xiàn)錯誤是否繼續(xù)工作
stop-writes-on-bgsave-error yes
# 是否壓縮rdb文件
rdbcompression yes
# 保存rdb文件時進行錯誤檢查
rdbchecksum yes
# rdb文件保存的目錄
dir ./

6炎疆、安全

# 設(shè)置密碼
config set requirepass 123456
# 登錄
auth 123456
# 設(shè)置能連接上redis的客戶端的最大數(shù)量
maxclients 10000
# redis設(shè)置最大的內(nèi)存
maxmemory <byte>
# 內(nèi)存達到上限的處理策略
# noeviction: 不刪除策略, 達到最大內(nèi)存限制時, 如果需要更多內(nèi)存, 直接返回錯誤信息。(默認值)
# allkeys-lru: 所有key通用; 優(yōu)先刪除最近最少使用(less recently used ,LRU) 的 key国裳。
# volatile-lru: 只限于設(shè)置了 expire 的部分; 優(yōu)先刪除最近最少使用(less recently used ,LRU) 的 key形入。
# allkeys-random: 所有key通用; 隨機刪除一部分 key。
# volatile-random: 只限于設(shè)置了 expire 的部分; 隨機刪除一部分 key缝左。
# volatile-ttl: 只限于設(shè)置了 expire 的部分; 優(yōu)先刪除剩余時間(time to live,TTL) 短的key亿遂。
maxmemory-policy noeviction

7、AOF設(shè)置

# 默認不開啟aof模式渺杉,默認使用rdb方式持久化蛇数,在大部分情況下rdb基本夠用
appendonly no
# 持久化文件名字
appendfilename "appendonly.aof"
#每次修改都會 sync。消耗性能
appendfsync always
#每秒執(zhí)行一次 sync是越,可能會丟失這一秒的數(shù)據(jù)耳舅。
appendfsync everysec
#不執(zhí)行 sync,這個時候操作系統(tǒng)自己同步數(shù)據(jù)倚评,速度最快
appendfsync no
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末浦徊,一起剝皮案震驚了整個濱河市馏予,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌盔性,老刑警劉巖霞丧,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異冕香,居然都是意外死亡蛹尝,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門悉尾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來箩言,“玉大人,你說我怎么就攤上這事焕襟≡墒眨” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵鸵赖,是天一觀的道長务漩。 經(jīng)常有香客問我,道長它褪,這世上最難降的妖魔是什么饵骨? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮茫打,結(jié)果婚禮上居触,老公的妹妹穿的比我還像新娘。我一直安慰自己老赤,他們只是感情好轮洋,可當(dāng)我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著抬旺,像睡著了一般弊予。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上开财,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天汉柒,我揣著相機與錄音,去河邊找鬼责鳍。 笑死碾褂,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的历葛。 我是一名探鬼主播正塌,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了传货?” 一聲冷哼從身側(cè)響起屎鳍,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤宏娄,失蹤者是張志新(化名)和其女友劉穎问裕,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體孵坚,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡粮宛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了卖宠。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片巍杈。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖扛伍,靈堂內(nèi)的尸體忽然破棺而出筷畦,到底是詐尸還是另有隱情,我是刑警寧澤刺洒,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布鳖宾,位于F島的核電站,受9級特大地震影響逆航,放射性物質(zhì)發(fā)生泄漏鼎文。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一因俐、第九天 我趴在偏房一處隱蔽的房頂上張望拇惋。 院中可真熱鬧,春花似錦抹剩、人聲如沸撑帖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽磷仰。三九已至,卻和暖如春境蔼,著一層夾襖步出監(jiān)牢的瞬間灶平,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工箍土, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留逢享,地道東北人。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓吴藻,卻偏偏與公主長得像瞒爬,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容