导航菜单

  • 0.api
  • 0.Async
  • 0.module
  • 1.ES2015
  • 2.Promise
  • 3.Node
  • 4.NodeInstall
  • 5.REPL
  • 6.NodeCore
  • 7.module&NPM
  • 8.Encoding
  • 9.Buffer
  • 10.fs
  • 11.Stream-1
  • 11.Stream-2
  • 11.Stream-3
  • 11.Stream-4
  • 12-Network-2
  • 12.NetWork-3
  • 12.Network-1
  • 13.tcp
  • 14.http-1
  • 14.http-2
  • 15.compress
  • 16.crypto
  • 17.process
  • 18.yargs
  • 19.cache
  • 20.action
  • 21.https
  • 22.cookie
  • 23.session
  • 24.express-1
  • 24.express-2
  • 24.express-3
  • 24.express-4
  • 25.koa-1
  • 26.webpack-1-basic
  • 26.webpack-2-optimize
  • 26.webpack-3-file
  • 26.webpack-4.tapable
  • 26.webpack-5-AST
  • 26.webpack-6-sources
  • 26.webpack-7-loader
  • 26.webpack-8-plugin
  • 26.webpack-9-hand
  • 26.webpack-10-prepare
  • 28.redux
  • 28.redux-jwt-back
  • 28.redux-jwt-front
  • 29.mongodb-1
  • 29.mongodb-2
  • 29.mongodb-3
  • 29.mongodb-4
  • 29.mongodb-5
  • 29.mongodb-6
  • 30.cms-1-mysql
  • 30.cms-2-mysql
  • 30.cms-3-mysql
  • 30.cms-4-nunjucks
  • 30.cms-5-mock
  • 30.cms-6-egg
  • 30.cms-7-api
  • 30.cms-8-roadhog
  • 30.cms-9-yaml
  • 30.cms-10-umi
  • 30.cms-12-dva
  • 30.cms-13-dva-ant
  • 30.cms-14-front
  • 30.cms-15-deploy
  • 31.dva
  • 31.cms-13-dva-antdesign
  • 33.redis
  • 34.unittest
  • 35.jwt
  • 36.websocket-1
  • 36.websocket-2
  • 38.chat-api-1
  • 38.chat-api-2
  • 38.chat-3
  • 38.chat-api-3
  • 38.chat
  • 38.chat2
  • 38.chat2
  • 39.crawl-0
  • 39.crawl-1
  • 39.crawl-2
  • 40.deploy
  • 41.safe
  • 42.test
  • 43.nginx
  • 44.enzyme
  • 45.docker
  • 46.elastic
  • 47.oauth
  • 48.wxpay
  • index
  • 52.UML
  • 53.design
  • index
  • 54.linux
  • 57.ts
  • 56.react-ssr
  • 58.ts_react
  • 59.ketang
  • 59.ketang2
  • 61.1.devops-linux
  • 61.2.devops-vi
  • 61.3.devops-user
  • 61.4.devops-auth
  • 61.5.devops-shell
  • 61.6.devops-install
  • 61.7.devops-system
  • 61.8.devops-service
  • 61.9.devops-network
  • 61.10.devops-nginx
  • 61.11.devops-docker
  • 61.12.devops-jekins
  • 61.13.devops-groovy
  • 61.14.devops-php
  • 61.15.devops-java
  • 61.16.devops-node
  • 61.17.devops-k8s
  • 62.1.react-basic
  • 62.2.react-state
  • 62.3.react-high
  • 62.4.react-optimize
  • 62.5.react-hooks
  • 62.6.react-immutable
  • 62.7.react-mobx
  • 62.8.react-source
  • 63.1.redux
  • 63.2.redux-middleware
  • 63.3.redux-hooks
  • 63.4.redux-saga
  • 63.5.redux-saga-hand
  • 64.1.router
  • 64.2.router-connected
  • 65.1.typescript
  • 65.2.typescript
  • 65.3.typescript
  • 65.4.antd
  • 65.4.definition
  • 66-1.vue-base
  • 66-2.vue-component
  • 66-3.vue-cli3.0
  • 66-4.$message组件
  • 66-5.Form组件
  • 66-6.tree
  • 66-7.vue-router-apply
  • 66-8.axios-apply
  • 66-9.vuex-apply
  • 66-10.jwt-vue
  • 66-11.vue-ssr
  • 66-12.nuxt-apply
  • 66-13.pwa
  • 66-14.vue单元测试
  • 66-15.权限校验
  • 67-1-network
  • 68-2-wireshark
  • 7.npm2
  • 69-hooks
  • 70-deploy
  • 71-hmr
  • 72.deploy
  • 73.import
  • 74.mobile
  • 75.webpack-1.文件分析
  • 75.webpack-2.loader
  • 75.webpack-3.源码流程
  • 75.webpack-4.tapable
  • 75.webpack-5.prepare
  • 75.webpack-6.resolve
  • 75.webpack-7.loader
  • 75.webpack-8.module
  • 75.webpack-9.chunk
  • 75.webpack-10.asset
  • 75.webpack-11.实现
  • 76.react_optimize
  • 77.ts_ketang_back
  • 77.ts_ketang_front
  • 78.vue-domdiff
  • 79.grammar
  • 80.tree
  • 81.axios
  • 82.1.react
  • 82.2.react-high
  • 82.3.react-router
  • 82.4.redux
  • 82.5.redux_middleware
  • 82.6.connected
  • 82.7.saga
  • 82.8.dva
  • 82.8.dva-source
  • 82.9.roadhog
  • 82.10.umi
  • 82.11.antdesign
  • 82.12.ketang-front
  • 82.12.ketang-back
  • 83.upload
  • 84.graphql
  • 85.antpro
  • 86.1.uml
  • 86.2.design
  • 87.postcss
  • 88.react16-1
  • 89.nextjs
  • 90.react-test
  • 91.react-ts
  • 92.rbac
  • 93.tsnode
  • 94.1.JavaScript
  • 94.2.JavaScript
  • 94.3.MODULE
  • 94.4.EventLoop
  • 94.5.文件上传
  • 94.6.https
  • 94.7. nginx
  • 95.1. react
  • 95.2.react
  • 96.1.react16
  • 96.2.fiber
  • 96.3.fiber
  • 97.serverless
  • 98.websocket
  • 100.1.react-basic
  • 101.1.monitor
  • 101.2.monitor
  • 102.java
  • 103.1.webpack-usage
  • 103.2.webpack-bundle
  • 103.3.webpack-ast
  • 103.4.webpack-flow
  • 103.5.webpack-loader
  • 103.6.webpack-tapable
  • 103.7.webpack-plugin
  • 103.8.webpack-optimize1
  • 103.9.webpack-optimize2
  • 103.10.webpack-hand
  • 103.11.webpack-hmr
  • 103.11.webpack5
  • 103.13.splitChunks
  • 103.14.webpack-sourcemap
  • 103.15.webpack-compiler1
  • 103.15.webpack-compiler2
  • 103.16.rollup.1
  • 103.16.rollup.2
  • 103.16.rollup.3
  • 103.16.vite.basic
  • 103.16.vite.source
  • 103.16.vite.plugin
  • 103.16.vite.1
  • 103.16.vite.2
  • 103.17.polyfill
  • 104.1.binary
  • 104.2.binary
  • 105.skeleton
  • 106.1.react
  • 106.2.react_hooks
  • 106.3.react_router
  • 106.4.redux
  • 106.5.redux_middleware
  • 106.6.connected-react-router
  • 106.6.redux-first-history
  • 106.7.redux-saga
  • 106.8.dva
  • 106.9.umi
  • 106.10.ketang
  • 106.11.antdesign
  • 106.12.antpro
  • 106.13.router-6
  • 106.14.ssr
  • 106.15.nextjs
  • 106.16.1.cms
  • 106.16.2.cms
  • 106.16.3.cms
  • 106.16.4.cms
  • 106.16.mobx
  • 106.17.fomily
  • 107.fiber
  • 108.http
  • 109.1.webpack_usage
  • 109.2.webpack_source
  • 109.3.dll
  • 110.nest.js
  • 111.xstate
  • 112.Form
  • 113.redux-saga
  • 114.react+typescript
  • 115.immer
  • 116.pro5
  • 117.css-loader
  • 118.1.umi-core
  • 119.2.module-federation
  • 119.1.module-federation
  • 120.create-react-app
  • 121.react-scripts
  • 122.react-optimize
  • 123.jsx-runtime
  • 124.next.js
  • 125.1.linux
  • 125.2.linux-vi
  • 125.3.linux-user
  • 125.4.linux-auth
  • 125.5.linux-shell
  • 125.6.linux-install
  • 125.7.linux-system
  • 125.8.linux-service
  • 125.9.linux-network
  • 125.10.nginx
  • 125.11.docker
  • 125.12.ci
  • 125.13.k8s
  • 125.14.k8s
  • 125.15.k8s
  • 125.16.k8s
  • 126.11.react-1
  • 126.12.react-2
  • 126.12.react-3
  • 126.12.react-4
  • 126.12.react-5
  • 126.12.react-6
  • 126.12.react-7
  • 126.12.react-8
  • 127.frontend
  • 128.rollup
  • 129.px2rem-loader
  • 130.health
  • 131.hooks
  • 132.keepalive
  • 133.vue-cli
  • 134.react18
  • 134.2.react18
  • 134.3.react18
  • 135.function
  • 136.toolkit
  • 137.lerna
  • 138.create-vite
  • 139.cli
  • 140.antd
  • 141.react-dnd
  • 142.1.link
  • 143.1.gulp
  • 143.2.stream
  • 143.3.gulp
  • 144.1.closure
  • 144.2.v8
  • 144.3.gc
  • 145.react-router-v6
  • 146.browser
  • 147.lighthouse
  • 148.1.basic
  • 148.2.basic
  • 148.3.basic
  • 148.4.basic
  • 148.5.basic
  • 149.1.vite
  • 149.2.vite
  • 149.3.vite
  • 149.4.vite
  • 150.react-window
  • 151.react-query
  • 152.useRequest
  • 153.transition
  • 154.emotion
  • 155.1.formily
  • 155.2.formily
  • 155.3.formily
  • 155.3.1.mobx.usage
  • 155.3.2.mobx.source
  • 156.vue-loader
  • 103.11.mf
  • 157.1.react18
  • 158.umi4
  • 159.rxjs
  • 159.rxjs2
  • 160.bff
  • 161.zustand
  • 162.vscode
  • 163.emp
  • 164.cors
  • 1. Redis简介
  • 2.Redis 优势
  • 3. 安装
    • 3.1 Window下安装
    • 3.2 Mac下安装
    • 3.3 配置
  • 4. 数据类型
    • 4.1 字符串
      • 4.1.1 SET 设置值
      • 4.1.2 GET 获取值
      • 4.1.3 GETRANGE 获取子串
      • 4.1.4 INCR INCRBY 递增
      • 4.1.5 键
    • 4.2 哈希值
      • 4.2.1 HSET HMSET 设置值
      • 4.2.2 HGET HGETALL 获取值
      • 4.2.3 HDEL key field 删除键
      • 4.2.3 HKEYS 获取所有的KEYS
    • 4.3 列表
      • 4.3.1 LPUSH RPUSH 添加元素
      • 4.3.2 LRANGE 查看元素
      • 4.3.3 LPOP RPOP 弹出元素
      • 4.3.4 LINDEX ids 1
      • 4.3.5 LLEN key
      • 4.3.6 LREM key count value
    • 4.4 集合
      • 4.4.1 SADD 添加
      • 4.4.2 SMEMBERS 查看集合
      • 4.4.3 SCARD 获取集合元素个数
      • 4.4.4 SREM 删除元素
      • 4.4.5 集合运算
    • 4.5 有序集合
      • 4.5.1 ZADD 添加元素
      • 4.5.2 ZCARD 获取有序集合的成员数
      • 4.5.3 ZRANGE 查看有序集合
      • 4.5.4 ZREM 移除有序集合中的一个或多个成员
  • 5. Node.js中的使用
  • 6. Redis发布订阅
  • 7. Redis事务
  • 8. 备份与恢复
    • 8.1 备份
    • 8.2 恢复
  • 8. 安全

1. Redis简介 #

Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。

2.Redis 优势 #

  • 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
  • 丰富的数据类型 – Redis支持二进制的字符串、列表、哈希值、集合和有序集合等数据类型操作。
  • 原子性 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行
  • 单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
  • 丰富的特性 – Redis还支持 发布/订阅, 通知, key 过期等等特性。
  • 3. 安装 #

    3.1 Window下安装 #

  • redis-windows
  • redis服务端下载
  • redis客户端下载
  • redis官网
  • redis中文网
redis-server.exe redis.windows.conf 
 redis-cli.exe -h 127.0.0.1 -p 6379 。

3.2 Mac下安装 #

brew install redis
brew services start redis
redis-server /usr/local/etc/redis.conf

3.3 配置 #

CONFIG GET CONFIG_SETTING_NAME
CONFIG GET port

4. 数据类型 #

  • 字符串
  • 哈希值
  • 链表
  • 集合
  • 有序列表

4.1 字符串 #

字符串是最基本的类型,一个key对应一个value

4.1.1 SET 设置值 #

SET name zfpx

4.1.2 GET 获取值 #

GET name

4.1.3 GETRANGE 获取子串 #

GETRANGE key start end 
getrange name 1 2
"fp"

4.1.4 INCR INCRBY 递增 #

SET age 1
INCR age
INCRBY age 6
DECR age
DECRBY age  9

4.1.5 键 #

DEL key 删除 key
DEL user 
EXISTS key 判断一个key是否存在
EXISTS user 
EXPIRE key seconds  设置过期时间
EXPIRE user 10 
TTL key 以秒为单位返回给定key的剩余生存时间
TTL user 
TYPE key 返回key所存储的值的类型
TYPE user

4.2 哈希值 #

哈希值是一个字符串类型的Key和值的映射表,特别适合用于存储对象。

4.2.1 HSET HMSET 设置值 #

HSET person name 设置单个值
HMSET user name zfpx age 9  设置多个值

4.2.2 HGET HGETALL 获取值 #

HGET user name 获取单个值
HMGET user name age 获取多个值
HGETALL user 获取多有值

4.2.3 HDEL key field 删除键 #

HDEL key field
HDEL user name
HGETALL user

4.2.3 HKEYS 获取所有的KEYS #

 HKEYS user

4.3 列表 #

列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

4.3.1 LPUSH RPUSH 添加元素 #

返回列表的长度

LPUSH ids 2
LPUSH ids 1
RPUSH ids 3
RPUSH ids 4
RPUSH ids  5 6 

4.3.2 LRANGE 查看元素 #

LRANGE ids 0 2
LRANGE ids 0 -1

4.3.3 LPOP RPOP 弹出元素 #

查看并删除

LPOP ids 
RPOP ids

4.3.4 LINDEX ids 1 #

通过索引获取列表中的元素

LINDEX ids 0

4.3.5 LLEN key #

获取列表长度

LLEN ids

4.3.6 LREM key count value #

移除列表元素

  • count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。
  • count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。
  • count = 0 : 移除表中所有与 VALUE 相等的值。
    LREM ids count value
    127.0.0.1:6379> lpush my 1
    127.0.0.1:6379> lpush my 2
    127.0.0.1:6379> lpush my 2
    127.0.0.1:6379> lpush my 2
    127.0.0.1:6379> lpush my 3
    127.0.0.1:6379> lrange my 0 -1
    1) "3"
    2) "2"
    3) "2"
    4) "2"
    5) "1"
    127.0.0.1:6379> LREM my 2 2
    (integer) 2
    127.0.0.1:6379> lrange my 0 -1
    1) "3"
    2) "2"
    3) "1"

4.4 集合 #

集合是字符串类型的无序集合

4.4.1 SADD 添加 #

如果集合中已经存在指定的元素则返回0,如果不存在则添加成功返回1

SADD tags 1
SADD tags 2
SADD tags 2
SADD tags 3
SADD tags  4 5 6 
SMEMBERS tags

4.4.2 SMEMBERS 查看集合 #

SMEMBERS tags

4.4.3 SCARD 获取集合元素个数 #

SCARD tags

4.4.4 SREM 删除元素 #

SREM tags member
SREM tags 4
SMEMBERS tags

4.4.5 集合运算 #

SADD A 1 2 3 
SADD B 2 3 4
SINTER A B 交集
SDIFF A B 差集
SUNION A B 并集

4.5 有序集合 #

有序集合和集合一样也是字符串的集合,而且不能重复 不同之外是每个集合都会关联一个double类型的分数,redis可以通过这个分类来为集合中的元素进行从小到大排序,元素不能重复,但分数可以重复

4.5.1 ZADD 添加元素 #

ZADD key score1 member1 [score2 member2] 

ZADD levels 1 one
ZADD levels 2 two
ZADD levels 3 three
ZADD levels 4 four

4.5.2 ZCARD 获取有序集合的成员数 #

ZCARD key
ZCARD levels

4.5.3 ZRANGE 查看有序集合 #

ZRANGE levels  0 -1 按范围查看
ZRANGE levels  0 2 WITHSCORES 按范围查看,并显示分数

4.5.4 ZREM 移除有序集合中的一个或多个成员 #

ZREM key member [member ...] 
ZADD levels 1 one
ZADD levels 2 two
ZREM levels one
 ZRANGE levels  0 -1

5. Node.js中的使用 #

  • redis
const redis = require('redis');
let client = redis.createClient(6379, '127.0.0.1');
client.on('error', function (error) {
    console.error(error);
});
//1. 字符串类型
client.set('name', 'zfpx', redis.print);
client.get('name', redis.print);
//2. 集合
client.hset('user', 'name', 'zfpx', redis.print);
client.hset('user', 'age', '8', redis.print);
client.hget('user', 'age', redis.print);
client.hkeys('user', function (err, replies) {
    replies.forEach(function (item, index, items) {
        client.hget('user', item, redis.print);
    });
});

6. Redis发布订阅 #

Redis 发布订阅是一种消息通信模式:发送者发送消息,订阅者接收消息,客户端可以订阅任意数量的频道。

redissubscribe

SUBSCRIBE chat
PUBLISH chat zfpx
let client1 = redis.createClient(6379, '127.0.0.1');
let client2 = redis.createClient(6379, '127.0.0.1');
let count = 0;
client1.subscribe('food');
client1.subscribe('drink');
client1.on('message', function (channel, message) {
    console.log(channel, message);
    client1.unsubscribe('food');
});

client2.publish('food', '面包');
client2.publish('drink', '桔汁');
setTimeout(() => {
    client2.publish('food', '面包2');
    client2.publish('drink', '桔汁2');
}, 2000);

7. Redis事务 #

Redis 事务可以一次执行多个命令

  • 多个命令可以在执行EXEC命令之前放入缓存队列
  • 收到EXEC命令后会将缓存队列执行
  • 在执行事务的过程中,新提交的并不能被插入到事务执行序列中
  • DISCARD 可以取消事务,放弃执行事务块内的所有命令

    127.0.0.1:6379> MULTI
    127.0.0.1:6379> SET account1 1
    QUEUED
    127.0.0.1:6379> SET account2 3
    QUEUED
    127.0.0.1:6379> EXEC
    1) OK
    2) OK
    127.0.0.1:6379> GET account1
    "1"
    127.0.0.1:6379> GET account2
    "3"
  • 单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的

  • 事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做
let redis = require('redis');
let client = redis.createClient(6379, '127.0.0.1');
client.multi().hset('user2', 'name2', 'zfpx2').hset('user2', 'age2', '92').exec(redis.print);

8. 备份与恢复 #

8.1 备份 #

127.0.0.1:6379> SAVE
OK

该命令将在 redis 安装目录中创建dump.rdb文件。

8.2 恢复 #

将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务

 CONFIG GET dir
 BGSAVE

8. 安全 #

可以通过 redis 的配置文件设置密码参数,这样客户端连接到 redis 服务就需要密码验证,这样可以让你的 redis 服务更安全。

127.0.0.1:6379> CONFIG get requirepass
1) "requirepass"
2) ""
127.0.0.1:6379> CONFIG set requirepass 'zfpx'
OK
127.0.0.1:6379> CONFIG get requirepass
(error) NOAUTH Authentication required.
127.0.0.1:6379> AUTH zfpx
OK
127.0.0.1:6379> CONFIG get requirepass

访问验证

请输入访问令牌

Token不正确,请重新输入