Redis基础知识

注意:这是个人笔记,如果有不正确的地方可以在评论指出,大神勿喷

Redis Key(键)

语法

COMMAND KEY_NAME

基本就是命令加键名

Redis Key 常用命令

命令描述
KEYS pattern根据模式匹配键 KEYS会阻塞线程
DEL key删除键
DUMP key序列化键,并返回值
EXISTS key检查键是否存在
MOVE key db移动键到db数据库
RENAME key newkey修改key的名称
TYPE key返回key的类型
EXPIRE key seconds设置key过期时间,单位秒
PERSIST key移除key的过期时间
PTTL key以毫秒为单位计算key的过期时间
TTL key以秒为单位计算key的过期时间

redis数据类型

  • String(字符串)
  • Hash(哈希)
  • List(散列)
  • Set(集合)
  • zset(sorted set:有序集合)

String (字符串):

字符串

实例
redis 127.0.0.1:6379> SET name "runoob"
OK
redis 127.0.0.1:6379> GET name
"runoob"

此处使用了redis的SET和GET命令。
**注意:**一个键最多可以存储512MB。

常用命令
命令描述
SET key value设置key的值
SETNX key value如果key不存在则添加,如果存在则不操作
GET key获取指定key的值
GETSET key value重新给key赋值,并且返回旧值
STRLEN返回key所存储的字符串值长度
GETRANGE key start end返回 key 中字符串值的子字符
GETBIT key offset返回key指定offset偏移量上的位
SETBIT key offset value设置key指定offset偏移量上的位
MSET key1 [key2…]同时设置一个或多个 key-value 对
MGET key1 [key2…]同时获取一个或多个给定key的值
INCR key将key对应的值加一
INCRBY key increment将key对应的值加increment
INCRBYFLOAT key increment与上同,不过加的是浮点数
DECR key将key对应的值减一
DECRBY key decrement将key对应的值减decrement
APPEND key value如果key是已经存在的字符串,APPEND命令将value追加在key对应的值后面

Hash(哈希)

哈希

实例
redis> HMSET myhash field1 "Hello" field2 "World"
"OK"
redis> HGET myhash field1
"Hello"
redis> HGET myhash field2
"World"

此处使用HMSET和HGET命令,HMSET用来设置键值对field “value“,HGET获取对应field对应的value,每个Hash可以存储Alt text

常用命令
命令描述
HSET key field value添加单个域-值对
HMSET key field1 value1 [field2 value2]同时将多个域-值对加入哈希表中
HDEL key field1 [field2]删除哈希表多个字段
HEXISTS key field查看field在key中是否存在
HGET key field查找哈希表中field字段
HGETALL key查找哈希表中所有字段和值
HINCRBY key field increment给哈希表中field字段加increment
HINCRBYFLOAT key field increment同上,加浮点数
HKEYS key获取哈希表中所有字段
HLEN key获取哈希表的长度

| HVALS key | 获取哈希表中所有值 |


List(列表)

redis列表是简单的字符串列表,按照顺序插入,可以从表尾插入或者从表头插入

实例

在这里插入图片描述
**注意:**列表最多存储Alt text

常用命令
命令描述
LPUSH key value1 [vlaue2]将一个或多个值插入到列表头部
RPUSH key value1 [vlaue2]将一个或多个值插入到列表尾部
LPOP key移除并获取列表第一个元素
RPOP key移除并获取列表最后一个元素
LLEN key获取列表长度
LREM key count value移除列表元素 count<0 从表头查找 count>0 从表尾查找 count=0 移除所有与value相等的元素
LTRIM key start end移除start到end以外的所有元素
LRANGE key start stop获取列表指定范围的元素
LINSERT key BEFORE or AFTER pivot value插入在pivot元素之前或之后
LSET key index value设置列表指定index的元素值
LINDEX key index获取list中index的值
RPOPLPUSH source destination从source右边弹出一个元素加入到destination左边,并返回这个元素
BLPOP key1 [key2] timeout移除并获取一个或多个列表表头第一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
BRPOP key1 [key2] timeout移除并获取一个或多个列表表尾的一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止

Set(集合)

redis的集合是无序集合。集合通过Hash实现,所以添加、删除、查找的复杂度都是O(1)。

集合的数据结构是散列表,存储元素的时候通过散列函数对不同元素的返回值(桶)来区分不同的元素,如果出现两个元素经过散列函数后的值相等,那么就在返回值(桶)中以链表的形式来存储返回值相同的元素.

sadd命令
添加string元素到key对应的set集合中,成功返回1,如果元素已存在,返回0,否则返回错误。

sadd key member
实例

在这里插入图片描述

常用命令
命令描述
SADD key member1 [member2…]向集合添加一个或多个成员 并且返回不存在元素的个数
SREM key member1 [member2…]从集合中删除一个或多个成员
SCARD key获取集合的成员数量
SMEMBERS key获取集合所有元素
SISMEMBER key member判断元素是否存在于集合
SDIFF key [key…]返回多个集合的差集
SINTER key [key…]返回多个集合的交集
SUNION key [key…]返回多个集合的并集
SDIFFSTORE destination key [key…]进行差集并将结果存储到destination
SINTERSTORE destination key [key…]交集
SUNIONSTORE destination key [key…]并集
SRANDMEMBER key [count]当count大于零时,返回集合中随机不重复count个元素, 当count小于零时,返回集合中随机(可能重复)count个元素
SPOP key弹出集合中随机的元素

Zset(sorted set 有序集合)

Zset同Set基本结构差不多,同样,元素也是string,并且不允许有重复元素。
但是,Zset中每个元素关联了一个double类型的分数,用来对元素进行排序
Zset中元素不可以重复,但是分数可以重复

有序集合和列表的区别:

  1. 列表通过链表实现,取到中间的数速度会很慢,所以适合做"新鲜事"等访问中间元素少的应用,有序集合使用散列表或跳跃表实现,所以取出中间元素的速度比较快.时间复杂度是O(log(N))
  2. 列表不能简单地调整某个元素的位置,有序集合可以通过修改分数来改变位置.
  3. 有序集合比列表更耗内存.
实例

在这里插入图片描述
在这里插入图片描述

常用命令
命令描述
ZADD key score member [score member…]向有序集合添加一个或多个成员 如果元素已存在 则修改该元素的分数 并且返回新添加元素的个数
ZSCORE key member获取元素的分数
ZRANGE key start stop [WITHSCORES]获取有序集合的某个范围的元素 WITHSCORES附加属性可以显示元素的分数
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]]根据有序集合元素的分数获取元素 可选属性WITHSCORES与ZRANGE相同 offset是偏移量 count是offset后的几个元素
ZINCRBY key increment增加某个元素的分数 返回值是修改后的元素分数
ZCARD key获得有序集合的元素个数
ZCOUNT key min max获得元素分数在min和max之间的yuan’su
ZREM key member [member…]删除有序集合的元素 返回成功删除的元素个数
ZREMRANGEBYSCORE key min max根据max和min分数删除有序集合中的元素
ZREMRANGEBYRANK key start stop根据start和stop删除有序集合的元素 索引0表示最小的数
ZRANK key member获取指定元素的排名(从小到大)
ZREVRANK key member与上相反

事务

同Mysql中,Redis中的事务也是具有原子性的,但是Redis中的事务不存在rollback功能,如果执行错误,并不会影响后面的执行.

WATCH命令:可以持续监控某个键值,在该键值被修改后,阻止之后的事务执行.
UNWATCH命令:取消WATCH命令的监视.


持久化

在Redis中分为RDBAOF两种方式进行持久化.

RDB

RDB持久化是通过快照(snapshotting)完成的,达到一定条件,系统会自动保存当前数据库中数据,并且生成一份备份保存在硬盘中.
Redis会在下面的情况下对数据进行快照:

  • 根据用户配置规则进行自动快照
  • 用户执行SAVE或BGSAVE命令
  • 执行FLUSHALL命令
  • 执行复制时
根据用户配置规则进行自动快照

SAVE time number
通过在配置中添加SAVE命令来进行自动快照
time是多长时间内 单位是秒
number是多少个键被修改

用户执行SAVE或BGSAVE命令

SAVE命令:
当执行SAVE命令的时候,系统会阻塞所有客户端的请求.当数据库中数据过多的时候,会导致Redis长时间未响应.所以生产环境当中很少使用.
BGSAVE命令:
BGSAVE命令是后台异步执行快照保存,快照的同时服务器还可以响应客户端的请求.

执行FLUSHALL命令

只有在配置自动快照后,FLUSHALL命令执行后才会执行快照

执行复制时

设置主从模式后,Redis会在复制初始化时进行自动快照

AOF

AOF(append only file)会将Redis执行的每一条命令追加到硬盘文件中.
AOF会将无用的命令删除不会保存下来.比如:

SET key 1
SET key 2

AOF中只会保留SET key 2一个命令.
AOF如果不重写AOF文件的话,性能的影响比较小,但是AOF文件会越来越大,AOF文件过大会影响Master重启的回复速度.所以Master最好不要做持久化,如果数据比较关键,可以在Salve中做AOF持久化,策略为一秒一次.


主从模式

Redis提供复制功能,可以实现当一台数据库中的数据更新后,自动将数据同步到其他数据库.

在复制的概念中,数据库分为两类:主数据库(Master)从数据库(Salve)

主数据库可以进行读写操作,而从数据库一般是只读的.

一个主数据库可以有多个从数据库,但是一个从数据库只能有一个主数据库.

复制功能使用只需要在配置文件中加入salveof 主数据库地址 主数据库端口

原理

当一个从数据库启动后,会向主数据库发送SYNC命令,主数据库收到SYNC命令后会在后台开始保存快照(RDB),并且将保存快照期间收到的命令缓存起来.当快照完成后,主数据库会将快照和缓存命令发给从数据库.
注意:

  • Redis2.6及之间版本如果主从数据库断开后,当从数据库再次连接时,会重新从主数据库备份一遍数据,比较费时
  • Redis2.8实现增量数据传输,当从数据库重新连接时,主数据只需要发送断开期间的命令即可.

哨兵

功能

  1. 监控主数据库和从数据库是否正常运行
  2. 主数据库出现故障时自动将从数据库转换为主数据库

配置

哨兵会通过一下配置来找出需要监控的数据:
sentinel monitor master-name ip redis-post quorum

  • master-name是主数据库的名字 由大小写字母、数字和".-_"组成. 可以通过名字获取主数据库的ip和端口
  • ip是主数据库的ip地址
  • redis-post 端口号
  • quorum表示执行故障恢复操作前至少需要几个哨兵节点的同意

原理

每个哨兵会进行一下操作监控数据库:

  1. 每10秒哨兵会向主数据库和从数据库发送INFO命令
  2. 每2秒哨兵会像主数据库和从数据库的__sentinel__:hello频道发送自己的信息
  3. 每1秒向主数据库、从数据库和其他哨兵发送PING命令

发送INFO命令可以获取当前数据库的相关信息,从而实现新节点的自动发现.

sentinel:hello频道发送信息是用来哨兵与哨兵之间的交流,如果新增哨兵就建立一条新连接,哨兵与哨兵之间只发送PING命令

发送PING命令用来监控数据库和节点有没有停止服务,如果被PING的数据库或节点在一定时间内没有回复,那么哨兵就认定为主观下线,下来会去询问其他哨兵信息,如果超过一定数量的哨兵都认为主观下线,那么这个数据库或节点就被认为是客观下线,并选举领头的哨兵节点对主从系统发起故障恢复.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值