20210519第二天

20210519第二天

Redis 学习

  • Redis 是一个灵活的高性能 key-value 数据结构存储,可以用来作为数据库、缓存和消息队列。
  • 可以将内存的数据存入磁盘,支持数据存储的持久化
  • 支持的数据类型:string、list、set、zset(sorted set)、hash。
  • 支持数据备份
  • 读写速度快,特性丰富(设置 key 过期,发布订阅通知等等)
Redis 键命令:
命令描述
DEL用于删除key
EXISTS用于查看给定 key 是否存在
EXPIRE为给定 key 设置过期时间
MOVE把当前数据库的 key 移动到给定的数据库
TTL返回给定 key 的剩余生存时间
RENAME重命名 key
type返回给定 key 的数据类型
SET myKey "hello"
EXPIRE myKey 10
TTL myKey
TYPE myKey
RENAME myKey herKey
Redis 字符串命令:
命令描述
SET设置指定 key 的值
GET查找指定 key 的值
GETSET为给定的 key 重新赋值,并返回旧值
SETNX只有在 key 不存在时设置 key 的值
STRLEN返回给定 key 的 value 的长度
SET myKey "hello"
GETSET myKey "world"
GET myKey
SETEX mykey 10 "Hello" //  设置 value 的同时设置过期时间
Redis 哈希命令:
命令描述
HDEL删除一个或者多个哈希表字段
HEXISTS查看哈希表 key 中,指定的字段是否存在
HKEYS获取哈希表中所有的字段
HVALS获取哈希表中所有值
HSTRLEN返回哈希表 key 中, 与给定域 field 相关联的值的字符串长度
HSET myhash field1 "Hello"
HDEL myhash filed1
HEXISTS myhash filed1
HKEYS myhash 
Redis 列表命令:
命令描述
BLPOP移除并获取第一个元素
BRPOP移除并获取最后一个元素
LINDEX通过索引获取列表的元素
LLEN获取列表的长度
LPUSH插入一个或者多个元素到列表头部
LSET通过索引设置元素的值
RPUSH mylist "one"
RPUSH mylist "two"
RPUSH mylist "three"
LSET mylist 0 "four"
LSET mylist -2 "five"
Redis 集合命令:

Redis 的 Set 是 string 类型的无序集合。
集合成员是唯一的,这就意味着集合中没有重复的数据。

命令描述
SADD向集合添加一个或者多个成员
SCARD获取集合的成员数
SISMEMBER判断是不是集合的成员
SMEMBERS返回集合中的所有成员
SREM移除集合中一个或者多个成员
SADD myset "one"
SADD myset "two"
SADD myset "three"
SREM myset "one"
SREM myset "four"
SMEMBERS myset
SISMEMBER myset "five"
Redis 备份和还原
Redis 客户端连接
Redis 事务

事务是指一个完整的动作,要么全部执行,要么什么也没有做。
但Redis 的事务并不是真正的事务,只是用于帮助用户在一个步骤中执行多个命令。单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。

Redis 事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。

Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:

  • 批量操作在发送 EXEC 命令前被放入队列缓存。
  • 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
  • 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。

MULTI、EXEC、DISCARD、WATCH 这四个指令构成了 redis 事务处理的基础。

  • MULTI 用来组装一个事务;
  • EXEC 用来执行一个事务;
  • DISCARD 用来取消一个事务;
  • WATCH 用来监视一些 key,一旦这些 key 在事务执行之前被改变,则取消事务的执行。
redis 127.0.0.1:6379> MULTI  
OK  
redis 127.0.0.1:6379> EXEC  
(empty list or set)  
redis 127.0.0.1:6379> MULTI  
OK  
redis 127.0.0.1:6379> SET rediscomcn redis  
QUEUED  
redis 127.0.0.1:6379> GET rediscomcn  
QUEUED  
redis 127.0.0.1:6379> INCR visitors  
QUEUED  
redis 127.0.0.1:6379> EXEC  
1) OK  
2) "redis"  
3) (integer) 1  
// 出现 QUEUED 则表示我们这个命令成功插入了缓存队列,在将来执行 EXEC 时,这些被 QUEUED 的命令都会被组装成一个事务来执行。

WATCH 本身的作用是监视 key 是否被改动过,而且支持同时监视多个 key,只要还没真正触发事务,WATCH 都会尽职尽责的监视,一旦发现某个 key 被修改了,在执行 EXEC 时就会返回 nil,表示事务无法触发。(实现了乐观锁的功能 CAS)

127.0.0.1:6379> set age 23
OK
127.0.0.1:6379> watch age //开始监视age
OK
127.0.0.1:6379> set age 24 //在EXEC之前,age的值被修改了
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set age 25
QUEUED
127.0.0.1:6379> get age
QUEUED
127.0.0.1:6379> exec //触发EXEC
(nil) //事务无法被执行
Redis 发布订阅

一个客户端订阅消息,通道是 channel1
一个客户端发布消息,通道是 channel1
这时候订阅者可以接收发布者发送的消息

在Redis中,客户端可以订阅任意数量的频道。

订阅消息
发布消息

// 第一个客户端
redis 127.0.0.1:6379> SUBSCRIBE rediscomcnChat
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "redisChat"
3) (integer) 1
// 第二个客户端
redis 127.0.0.1:6379> PUBLISH rediscomcnChat "Redis PUBLISH test"
(integer) 1

redis 127.0.0.1:6379> PUBLISH rediscomcnChat "Learn redis by redis.com.cn"
(integer) 1

 /*
 订阅者的客户端会显示如下消息
	1) "message"
	2) "rediscomcnChat"
	3) "Redis PUBLISH test"
	1) "message"
	2) "rediscomcnChat"
	3) "Learn redis by redis.com.cn"
*/
Redis Stream
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值