Redis常用功能

@Redis常用功能介绍

Redis

一、Redis配置

【1、查看配置】

redis 127.0.0.1:6379> CONFIG GET *

在这里插入图片描述

【2、修改配置】

redis 127.0.0.1:6379> CONFIG SET loglevel “notice”

【3、配置说明】
1)、设置密码:requirepass

config set requirepass zx123456

2)、密码登陆:auth

auth zx123456

3)、每次更新进行日志记录:appendonly

config set appendonly yes

4)、多长时间,多少次更新,将数据同步到数据文件: save

Redis默认配置文件中提供了三个条件:

save 900 1
save 300 10
save 60 10000

分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改

5)、指定更新日志条件,共有3个可选值: appendfsync

no:表示等操作系统进行数据缓存同步到磁盘(快)
always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全)
everysec:表示每秒同步一次(折中,默认值)

6)、是否启用*【虚拟内存机制】*,默认值为no:vm-enabled

VM机制将数据分页存放,由Redis将访问量较少的页即冷数据swap到磁盘上,访问多的页面由磁盘自动换出到内存中。【2.6版本后被去除】

二、数据类型

Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

1)、string【最大能存储 512MB】
序号命令描述
1set key value新增
2get key查询
3del key删除
4getrange key stare end返回 key 中字符串值的子字符,字符串截取
5getset key value将给定 key 的值设为 value ,并返回 key 的旧值(old value)
6getbit key offset对 key 所储存的字符串值,获取指定偏移量上的位(bit),(0/1)
7mget key1 [key2…]获取所有(一个或多个)给定 key 的值。
8setbit key offset value对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。
9setex key seconds value设置 key 的值并设置过期时间(秒)
10setrange key offset value用 value 值覆盖给定 key 所储存的字符串值,从偏移量 offset 开始。
11strlen key获取 key 值长度
12mset key1 value1 [key2 value2…]同时设置多个键值对
13msetnx key1 value1 [key2 value2…]同时设置多个键值对,当且仅当所有的 key 都不存在
14psetex key milliseconds value类似setex,以毫秒为单位设置 key 的生存时间
15incr key将 key 中储存的数字值增1,只对 intrger 有效
16incrby key increment将 key 所储存的值加上给定的增量值(increment)
17incrbyfloat key increment将 key 所储存的值加上给定的浮点增量值(increment)
18decr key将 key 中储存的数字值减1,只对 intrger 有效
19decrby key increment将 key 所储存的值减去给定的减量值(decrement)
20append key value如果 key 已经存在并且是一个字符串, APPEND 命令将指定的 value 追加到该 key 原来值(value)的末尾。
2)、hash【最大2^32 -1 键值对(40多亿)】

hmset hash field1 1 field2 2 (map hash 新增key field1 和 field2)
hget hash field1 (查询map hash key 为 field1)

3)、list【最多可存储 2^32 - 1 元素 (4294967295, 每个列表可存储40多亿)】

lpush list 1 (列表(头部)左边插入值1)
rpush list 4 (列表(尾部)右边插入值4)
lrange list stop end (从列表list取出(头部)指定范围值)

4)、set【string类型的无序集合,通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1),元素唯一】

sadd set 1 (添加一个 string 元素到 key 对应的 set 集合中,成功返回1,如果元素已经在集合中返回 0,如果 key 对应的 set 不存在则返回错误)
smembers set (查看set)

5)、zset【string类型元素的集合,且不允许重复的成员,每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序】

语法:zadd key score member
zadd zset 0 1 (新增值1,分数为0,元素在集合中存在则更新对应score)
zrangebyscore zset 0 1 (查询分数为0-1的所有值并排序输出)

三、常用命令

序号命令描述
1DEL key该命令用于在 key 存在时删除 key。
2DUMP key序列化给定 key ,并返回被序列化的值。
3EXISTS key检查给定 key 是否存在。
4EXPIRE key seconds为给定 key 设置过期时间,以秒计。
5EXPIREAT key timestamp为 key 设置过期时间。 不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)。
6PEXPIRE key milliseconds设置 key 的过期时间以毫秒计。
7PEXPIREAT key milliseconds-timestamp设置 key 过期时间的时间戳(unix timestamp) 以毫秒计
8KEYS pattern查找所有符合给定模式(pattern)的 key ,通配符为*
9MOVE key db将当前数据库的 key 移动到给定的数据库 db 当中。
10PERSIST key移除 key 的过期时间,key 将持久保持。
11PTTL key以毫秒为单位返回 key 的剩余的过期时间。
12TTL key以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。
13RANDOMKEY从当前数据库中随机返回一个 key 。
14RENAME key newkey修改 key 的名称,若 key 存在则覆盖。
15RENAMENX key newkey仅当 newkey 不存在时,将 key 改名为 newkey 。
16TYPE key返回 key 所储存的值的类型。

四、发布订阅

【1、作用】

1、可实现消息提醒功能。

【2、发布】
序号命令描述
1SUBSCRIBE channel message发布信息到指定频道
2PUBSUB subcommand [argument [argument …]]查看订阅与发布系统状态。
【3、订阅】
序号命令描述
1SUBSCRIBE channel [channel …]订阅一个或多个频道的信息
2PSUBSCRIBE pattern [pattern …]订阅一个或多个符合给定模式的频道,用*通配
3PUNSUBSCRIBE [pattern [pattern …]]退订所有给定模式的频道
4UNSUBSCRIBE [channel [channel …]]指退订给定的频道。

五、事务

【1、简介】

Redis 事务可以一次执行多个命令:
1、批量操作在发送 EXEC 命令前被放入队列缓存。
2、收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行*【非原子性】*。
3、在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。

【2、步骤】

一个事务从开始到执行会经历以下三个阶段:
1、开始事务。
2、命令入队。
3、执行事务。

【3、实例】
1)、开始事物

multi

2)、命令入队

publish chat 11111111111
publish chat 22222222222

3)、执行事务

exec

【4、命令】
序号命令描述
1WATCH key [key …]监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。
2MULTI标记一个事务块的开始。
3DISCARD取消事务,放弃执行事务块内的所有命令。
4EXEC执行所有事务块内的命令。
5UNWATCH取消 WATCH 命令对所有 key 的监视。

六、脚本

暂不考虑

七、服务器

【1、命令】
序号命令描述
1info查看 redis 服务器的统计信息
2COMMAND获取 Redis 命令详情数组
3CLIENT LIST获取连接到服务器的客户端连接列表
4CLIENT KILL [ip:port] [ID client-id]关闭客户端连接
5BGSAVE在后台异步保存当前数据库的数据到磁盘
6CLIENT SETNAME connection-name设置当前连接的名称
7timeredis服务器时间
8CONFIG SET parameter value修改 redis 配置参数,无需重启
9CONFIG REWRITE对启动 Redis 服务器时所指定的 redis.conf 配置文件进行改写
10DBSIZE返回当前数据库的 key 的数量
11FLUSHALL删除所有数据库的所有key
12FLUSHDB删除当前数据库的所有key
13LASTSAVE返回最近一次 Redis 成功将数据保存到磁盘上的时间,以 UNIX 时间戳格式表示
14MONITOR实时打印出 Redis 服务器接收到的命令,调试用
15SAVE同步保存数据到硬盘
16ROLE返回主从实例所属的角色
17SHUTDOWN [NOSAVE] [SAVE]异步存数据到硬盘,并关闭服务器,服务器重新启动后,客户端默认连上。(nosave:不保存数据;save:保存数据,默认保存)
18SLAVEOF host port将当前服务器转变为指定服务器的从属服务器(slave server)
19SYNC同步主从服务器
20ROLE返回主从实例所属的角色

八、数据备份与恢复

【1、备份】
序号命令描述
1SAVE创建当前数据库的备份,持久化到(dump.rdb) 文件
2DBSAVE后台执行当前数据库的备份,持久化到(dump.rdb)文件
【2、恢复】

只需将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可。
获取 redis 目录可以使用 CONFIG 命令:CONFIG GET dir

【3、数据持久化方式】
1)、aof(增量,一条数据可能保存多条记录)

像关系数据库中的binlog一样 把每一次写操作以追加的形式记录在其中以文件的形式刷到磁盘里。

并且可以使用不同的fsync策略,无fsync,每秒fsync,每次写的时候fsync。

优点:

1、使用默认的每秒fsync策略,Redis的性能依然很好(fsync是由后台线程进行处理的,主线程会尽力处理客户端请求)。
2、一旦出现故障,最多丢失1秒的数据.

缺点:

1、那就是aof文件的大小会随着时间线性增长 一段时间之后 就会变得很大。
2、以AOF的形式来恢复数据 那么由于AOF文件的巨大体积 可能会让进程如同假死一样 十分的慢。

2)、rdb(全量)

是一种快照机制,rdb就是每隔一段时间对内存中的数据做一次快照,保存在rdb文件中

优点:

1、redis的主从同步可以实现异步 也是由于rdb的机制 他在做快照时会fork出一个子进程 由子进程来做快照,父进程完全处理请求毫不影响,很适合数据的备份。

缺点:

1、如果数据量很大的话 rdb它要保存一个完整的数据集 是一个大的工作 如果时间间隔设置的太短 ,那么严重影响redis的性能,但是按照常规设置的话 如5分钟一次 那么如果宕机或者重启 就会基于上次做rdb的时间,从而丢失分钟级的数据

3)、rdb&aof

要求很高的数据保障性选用

4)、aof-rdb的混合方案

redis4.0的新特性,待观察

九、性能测试

todo

十、客户端连接

【1、客户端连接】

Redis 通过监听一个 TCP 端口或者 Unix socket 的方式来接收来自客户端的连接,当一个连接建立后,Redis 内部会进行以下一些操作:

1、客户端 socket 会被设置为非阻塞模式,因为 Redis 在网络事件处理上采用的是非阻塞多路复用模型。
2、为这个 socket 设置 TCP_NODELAY 属性,禁用 Nagle 算法。
3、创建一个可读的文件事件用于监听这个客户端 socket 的数据发送。

【2、连接数】

maxclients:最大连接数,默认10000
config set maxclients
config get maxclients

【3、客户端命令】
序号命令描述
1CLIENT LIST返回连接到 redis 服务的客户端列表
2CLIENT SETNAME设置当前连接的名称
3CLIENT GETNAME设置服务名称
4CLIENT PAUSE time挂起客户端连接,指定挂起的时间以毫秒计
5CLIENT KILL关闭客户端连接
【4、备注】

1、Nagle算法是通过缓存将多个小包积攒到一定数据时再发送,有一定延迟,不适合在高频互动的服务器/客户端使用。
2、TCP_NODELAY:TCP无延迟。

十一、管道技术

【1、管道技术】
1)、Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。这意味着通常情况下一个请求会遵循以下步骤:

1、客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应。
2、服务端处理命令,并将结果返回给客户端。

2)、Redis 管道技术可以在服务端未响应时,客户端可以继续向服务端发送请求,并最终一次性读取所有服务端的响应。
【2、作用】

1、提升 redis 服务的性能

【3、实例】

查看 redis 管道,只需要启动 redis 实例并输入以下命令:

客户端命令:
$(echo -en “PING\r\n SET runoobkey redis\r\nGET runoobkey\r\nINCR visitor\r\nINCR visitor\r\nINCR visitor\r\n”; sleep 10) | nc localhost 6379

服务端返回:
+PONG
+OK
redis
:1
:2
:3

以上实例中我们通过使用 PING 命令查看redis服务是否可用, 之后我们设置了 runoobkey 的值为 redis,然后我们获取 runoobkey 的值并使得 visitor 自增 3 次。

在返回的结果中我们可以看到这些命令一次性向 redis 服务提交,并最终一次性读取所有服务端的响应。

十二、分区

分区是分割数据到多个Redis实例的处理过程,因此每个实例只保存key的一个子集。

【1、分区优劣】
1)、分区的优势

1、通过利用多台计算机内存的和值,允许我们构造更大的数据库。
2、通过多核和多台计算机,允许我们扩展计算能力;通过多台计算机和网络适配器,允许我们扩展网络带宽。

2)、分区的不足

redis的一些特性在分区方面表现的不是很好:

1、涉及多个key的操作通常是不被支持的。举例来说,当两个set映射到不同的redis实例上时,你就不能对这两个set执行交集操作。
2、涉及多个key的redis事务不能使用。
3、当使用分区时,数据处理较为复杂,比如你需要处理多个rdb/aof文件,并且从多个实例和主机备份持久化文件。
4、增加或删除容量也比较复杂。redis集群大多数支持在运行时增加、删除节点的透明数据平衡的能力,但是类似于客户端分区、代理等其他系统则不支持这项特性。然而,一种叫做presharding的技术对此是有帮助的。

【2、分区类型】

Redis 有两种类型分区。 假设有4个Redis实例 R0,R1,R2,R3,和类似user:1,user:2这样的表示用户的多个key,对既定的key有多种不同方式来选择这个key存放在哪个实例中。也就是说,有不同的系统来映射某个key到某个Redis服务。

1)、范围分区

最简单的分区方式是按范围分区,就是映射一定范围的对象到特定的Redis实例。

比如,ID从0到10000的用户会保存到实例R0,ID从10001到 20000的用户会保存到R1,以此类推。

这种方式是可行的,并且在实际中使用,不足就是要有一个区间范围到实例的映射表。这个表要被管理,同时还需要各 种对象的映射表,通常对Redis来说并非是好的方法。

2)、哈希分区

另外一种分区方法是hash分区。这对任何key都适用,也无需是object_name:这种形式,像下面描述的一样简单:

用一个hash函数将key转换为一个数字,比如使用crc32 hash函数。对key foobar执行crc32(foobar)会输出类似93024922的整数。
对这个整数取模,将其转化为0-3之间的数字,就可以将这个整数映射到4个Redis实例中的一个了。93024922 % 4 = 2,就是说key foobar应该被存到R2实例中。注意:取模操作是取除的余数,通常在多种编程语言中用%操作符实现。

十三、其他配置

【1、配置 redis 外网可访问】

由于 redis 采用的安全策略,默认会只准许本地访问。需要通过简单配置,完成允许外网访问。
1)、修改 redis 的配置文件,将所有 bind 信息全部屏蔽。

bind 192.168.1.100 10.0.0.1
bind 192.168.1.8
bind 127.0.0.1
修改完成后,需要重新启动 redis 服务。

2)、修改 Linux 的防火墙(iptables),开启你的 redis 服务端口,默认是 6379。(待验证)

-A INPUT -m state –state NEW -m tcp -p tcp –dport 6379 -j ACCEPT
……
-A INPUT -j REJECT –reject-with icmp-host-prohibited

请注意,一定要将 redis 的防火墙配置放在 REJECT 的前面。然后执行

service iptables restart。

至此,就能够链接到 redis 服务,并且能够正确显示了。

十四、Redis异常

【1、断电】

1)、设置 appendonly 为 yes,每次更新进行备份,但影响效率。
待补充

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值