<commit_before>---
layout: post
tags : [缓存, redis, nosql]
title: Redis笔记

---

## 事务

* MULTI
* DISCARD
* EXEC
* WATCH key [key ...]
* UNWATCH 取消当前客户端 WATCH 命令对所有 key 的监视


  * 乐观锁
  * 当 EXEC 被调用时， 不管事务是否成功执行， 对所有键的监视都会被取消
  * 当客户端断开连接时， 该客户端对键的监视也会被取消

**2个保证**

* 隔离性: 事务中的所有命令都会序列化、按顺序地执行;事务在执行的过程中，不会被其他客户端发送来的命令请求所打

* 原子性：事务中的命令要么全部被执行，要么全部都不执行(但不保证都会成功)

**其他**

* 使用流水线（pipeline），因为发送事务和读取事务的回复都只需要和服务器进行一次通讯

  MULTI 是一次, 然后所有命令和EXEC是一次;

* 在 EXEC 命令执行之后所产生的错误， 并没有对它们进行特别处理： 即使事务中有某个/某些命令在执行时产生了错误， 事务中的其他命令仍然会继续执行


* WATCH 只能在客户端进入事务状态之前执行， 在事务状态下发送 WATCH 命令会引发一个错误， 但它不会造成整个事务失败， 也不会修改事务队列中已有的数据

* 当使用 AOF 方式做持久化的时候， Redis 会使用单个 write(2) 命令将事务写入到磁盘中

* 不支持回滚

* Redis 中的脚本本身就是一种事务， 所以任何在事务里可以完成的事， 在脚本里面也能完成。 并且一般来说， 使用脚本要来得更简单，并且速度更快

----

## 密码

* `CONFIG SET requirepass secret_password`  服务器将密码设置为 `secret_password`, 如果`secret_password` 是空字符则代表取消设置

  也可以通过配置文件中的`requirepass`进行设置

* `AUTH secret_password` 客户端进行验证

---
<commit_msg>redis<commit_after>---
layout: post
tags : [缓存, redis, nosql]
title: Redis笔记

---

## 事务

* MULTI
* DISCARD
* EXEC
* WATCH key [key ...]
* UNWATCH 取消当前客户端 WATCH 命令对所有 key 的监视


  * 乐观锁
  * 当 EXEC 被调用时， 不管事务是否成功执行， 对所有键的监视都会被取消
  * 当客户端断开连接时， 该客户端对键的监视也会被取消


ACID

redis事务实现了隔离性和一致性, 但是不保证原子性和持久性

* 原子性：事务中的命令要么全部被执行，要么全部都不执行, 但不保证都会成功, 如果有失败的步骤, 不影响后续执行, 不会回滚

* 持久性: 在单纯的内存模式下，事务肯定是不持久的

  <https://segmentfault.com/a/1190000002594059>

* 隔离性: 事务中的所有命令都会序列化、按顺序地执行;事务在执行的过程中，不会被其他客户端发送来的命令请求所打

**其他**

* 使用流水线（pipeline），因为发送事务和读取事务的回复都只需要和服务器进行一次通讯

  MULTI 是一次, 然后所有命令和EXEC是一次;

* 在 EXEC 命令执行之后所产生的错误， 并没有对它们进行特别处理： 即使事务中有某个/某些命令在执行时产生了错误， 事务中的其他命令仍然会继续执行


* WATCH 只能在客户端进入事务状态之前执行， 在事务状态下发送 WATCH 命令会引发一个错误， 但它不会造成整个事务失败， 也不会修改事务队列中已有的数据

* 当使用 AOF 方式做持久化的时候， Redis 会使用单个 write(2) 命令将事务写入到磁盘中

* 不支持回滚

* Redis 中的脚本本身就是一种事务， 所以任何在事务里可以完成的事， 在脚本里面也能完成。 并且一般来说， 使用脚本要来得更简单，并且速度更快

----

## 密码

* `CONFIG SET requirepass secret_password`  服务器将密码设置为 `<PASSWORD>`, 如果`secret_password` 是空字符则代表取消设置

  也可以通过配置文件中的`requirepass`进行设置

* `AUTH secret_password` 客户端进行验证

---

{'fraction_non_alphanumeric': 0.10489856506679862, 'fraction_numerical': 0.009401286491835725, 'mean_word_length': 5.090361445783133, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3079345', 'n_tokens_mistral': 1556, 'n_tokens_neox': 1780, 'n_words': 167}