redis小白实战教程

  1. 强烈推荐大家看的时候直接打开实验楼里的redis环境【https://www.shiyanlou.com/courses/106】,跟着敲一遍,基本就会了,也就20分钟左右就能记个大概了。
  2. redis简介和常见问题

       这里将会介绍对redis密切相关的常见的登录、配置、数据类型、查询、修改、删除数据,以及日常操作。

Redis是一个速度非常快的非关系数据库(non-relational database),它可以存储键(key)与5种不同类型的值(value)之间的映射(mapping),可以将存储在内存的键值对数据持久化到硬盘,可以使用复制特性来扩展读性能,还可以使用客户端分片来扩展写性能。

登录

1、widows环境登录

1】打开一个 cmd 窗口 使用cd命令切换目录到 C:\redis 运行 redis-server.exe redis.windows.conf

 

2】这时候另启一个cmd窗口,原来的不要关闭,不然就无法访问服务端了。

切换到redis目录下运行 redis-cli.exe -h 127.0.0.1 -p 6379

 

linux环境登录

登录redis服务器切换到redisuser用户

cd /opt/redis

./redis-cli

配置

1】建议使用 * 号获取所有配置项后,根据需要将星号换为要查看的内容,熟悉后就可以直接输入需要查看的配置

redis 127.0.0.1:6379> CONFIG GET *

 

2】编辑配置

你可以通过修改 redis.conf 文件或使用 CONFIG set 命令来修改配置。

127.0.0.1:6379> CONFIG SET timeout 250

OK

127.0.0.1:6379> CONFIG GET timeout

1) "timeout"

2) "250"

redis数据类型设置、查询、删除

1、String(字符串)

string是redis最基本的类型,你可以理解成与java中map类似类型,一个key对应一个value。

string类型是Redis最基本的数据类型,一个键最大能存储512MB。

1】设置一个键、值

127.0.0.1:6379> SET name "runoob"

OK

127.0.0.1:6379> GET name

"runoob"

在以上实例中我们使用了 Redis 的 SET 和 GET 命令。键为 name,对应的值为 runoob。

 

实例:系统根据班车编号查询对应的id

在以上实例中我们使用了 Redis 的 SET 和 GET 命令。键为 name,对应的值为 runoob。

实例:系统根据班车编号查询对应的id

2】修改也很简单,SET相同的键,用新值来覆盖老值

127.0.0.1:6379> SET name "zyw"

OK

127.0.0.1:6379> GET name

"zyw"

2、Hash(哈希)

Redis hash 是一个键值(key=>value)对集合。

Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。

1】我们先用HMSET对myhash对象的2个属性赋值,然后查询对象的属性值

127.0.0.1:6379> HMSET myhash field1 "Hello" field2 "World"

OK

127.0.0.1:6379> HGET myhash field1

"Hello"

127.0.0.1:6379> HGET myhash field2

"World"

 

以上实例中 hash 数据类型存储了包含用户脚本信息的用户对象。 实例中我们使用了 Redis HMSET, HGETALL 命令,user:1为键值。

每个 hash 可以存储 232 -1 键值对(40多亿)。

 

3、List(列表)

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

列表最多可存储 232 - 1 元素 (4294967295, 每个列表可存储40多亿)。

 

1】lpush是list push的缩写,用来给列表中顺序插入字符串。Range是查看范围的意思,从0开始查看到第n个元素

127.0.0.1:6379> lpush runoob mongodb

(integer) 2

127.0.0.1:6379> lpush runoob rabitmq

(integer) 3

127.0.0.1:6379> lrange runoob 0 2

1) "rabitmq"

2) "mongodb"

3) "redis"

127.0.0.1:6379> lrange runoob 0 1

1) "rabitmq"

2) "mongodb"

4、Set(集合)

Redis的Set是string类型的无序集合。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

sadd 命令

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

sadd key member

1】sadd是set add缩写,代表往集合中添加成员;smembers是set members的缩写,代表显示集合所有成员

127.0.0.1:6379> sadd fruit apple

(integer) 1

127.0.0.1:6379> sadd fruit banana

(integer) 1

127.0.0.1:6379> smembers fruit

1) "apple"

2) "banana"

127.0.0.1:6379> sadd fruit apple

(integer) 0

127.0.0.1:6379> smembers fruit

1) "apple"

2) "banana"

注意:以上实例中 apple添加了两次,但根据集合内元素的唯一性,第二次插入的元素将被忽略。

集合中最大的成员数为 232 - 1(4294967295, 每个集合可存储40多亿个成员)。

 

5、zset(sorted set:有序集合)

Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

zset的成员是唯一的,但分数(score)却可以重复。

zadd 命令

添加元素到集合,元素在集合中存在则更新对应score

zadd key score member

1】ZRANGEBYSCORE 是ZSET RANGE BY SCORE的缩写,代表有序集合选定成员范围排序。

127.0.0.1:6379> zadd color 0 yellow

(integer) 1

127.0.0.1:6379> zadd color 0 green

(integer) 1

127.0.0.1:6379> ZRANGEBYSCORE color 0 3

1) "green"

2) "yellow"

​​​​​​​redis命令重命名、清理内存

部分公司将redis原有flushall命令禁用,修改命令名在redis.conf里查看,比如重命名为sgflushall

同样的config命令也被重命名为sgconfig

 

登录redis服务器切换到redisuser用户

cd /opt/redis

./redis-cli

sgflushall

​​​​​​​Redis 服务器命令及描述

BGREWRITEAOF 

异步执行一个 AOF(AppendOnly File) 文件重写操作

BGSAVE 

在后台异步保存当前数据库的数据到磁盘

CLIENT KILL [ip:port] [ID client-id] 

关闭客户端连接

CLIENT LIST 

获取连接到服务器的客户端连接列表

CLIENT GETNAME 

获取连接的名称

CLIENT PAUSE timeout 

在指定时间内终止运行来自客户端的命令

CLIENT SETNAME connection-name 

设置当前连接的名称

CLUSTER SLOTS 

获取集群节点的映射数组

COMMAND 

获取 Redis 命令详情数组

COMMAND COUNT 

获取 Redis 命令总数

COMMAND GETKEYS 

获取给定命令的所有键

TIME 

返回当前服务器时间

COMMAND INFO command-name [command-name ...] 

获取指定 Redis 命令描述的数组

CONFIG GET parameter 

获取指定配置参数的值

CONFIG REWRITE 

对启动 Redis 服务器时所指定的 redis.conf 配置文件进行改写

CONFIG SET parameter value 

修改 redis 配置参数,无需重启

CONFIG RESETSTAT 

重置 INFO 命令中的某些统计数据

DBSIZE 

返回当前数据库的 key 的数量

DEBUG OBJECT key 

获取 key 的调试信息

DEBUG SEGFAULT 

让 Redis 服务崩溃

FLUSHALL 

删除所有数据库的所有key

FLUSHDB 

删除当前数据库的所有key

INFO [section] 

获取 Redis 服务器的各种信息和统计数值

LASTSAVE 

返回最近一次 Redis 成功将数据保存到磁盘上的时间,以 UNIX 时间戳格式表示

MONITOR 

实时打印出 Redis 服务器接收到的命令,调试用

ROLE 

返回主从实例所属的角色

SAVE 

同步保存数据到硬盘

SHUTDOWN [NOSAVE] [SAVE] 

异步保存数据到硬盘,并关闭服务器

SLAVEOF host port 

将当前服务器转变为指定服务器的从属服务器(slave server)

SLOWLOG subcommand [argument] 

管理 redis 的慢日志

SYNC 

用于复制功能(replication)的内部命令

 

​​​​​​​​​​​​​​Redis 数据备份与恢复

Redis SAVE 命令用于创建当前数据库的备份。

语法

redis Save 命令基本语法如下:

redis 127.0.0.1:6379> SAVE

实例

redis 127.0.0.1:6379> SAVE

OK

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

 

恢复数据

如果需要恢复数据,只需将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可。获取 redis 目录可以使用 CONFIG 命令,如下所示:

redis 127.0.0.1:6379> CONFIG GET dir

1) "dir"

2) "/usr/local/redis/bin"

 

以上命令 CONFIG GET dir 输出的 redis 安装目录为 /usr/local/redis/bin。

 

Bgsave

创建 redis 备份文件也可以使用命令 BGSAVE,该命令在后台执行。

实例

127.0.0.1:6379> BGSAVE

Background saving started

Redis 分区

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

分区的优势

    通过利用多台计算机内存的和值,允许我们构造更大的数据库。

    通过多核和多台计算机,允许我们扩展计算能力;通过多台计算机和网络适配器,允许我们扩展网络带宽。

分区的不足

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

    涉及多个key的操作通常是不被支持的。举例来说,当两个set映射到不同的redis实例上时,你就不能对这两个set执行交集操作。

    涉及多个key的redis事务不能使用。

    当使用分区时,数据处理较为复杂,比如你需要处理多个rdb/aof文件,并且从多个实例和主机备份持久化文件。

    增加或删除容量也比较复杂。redis集群大多数支持在运行时增加、删除节点的透明数据平衡的能力,但是类似于客户端分区、代理等其他系统则不支持这项特性。然而,一种叫做presharding的技术对此是有帮助的。

分区类型

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

范围分区

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

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

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

哈希分区

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

    用一个hash函数将key转换为一个数字,比如使用crc32 hash函数。对key foobar执行crc32(foobar)会输出类似93024922的整数。

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

 

redis日常操作手册:

​​​​​​​​​​​​​​redis起停服务

1】redis从机启停操作

用redisuser用户登录redis机器,执行/opt/redis-2.8.8/src/redis-cli shutdown命令来停止从机的redis

用redisuser用户登录redis机器,/opt/redis-2.8.8/src/redis-server /opt/redis-2.8.8/redis.conf命令在启动redis

挂载主服务:redisuser用户登录redis机器,执行/opt/redis-2.8.8/src/redis-cli,如图:

 

执行slaveof IP(master) 6379,(IP是master的IP) 执行完后使用dbsize验证状态即可

2】redis主机的启停操作

进行主备切换:

执行主备切换首先要要获取shardname信息,方法如下

在主redis上执行/opt/redis-2.8.8/src/redis-cli -h setinelip -p 26379 info|grep redismasterip;

输出信息类似如下:

master327:name=eppsaps_master_X,status=ok,address=redismasterip:6379,slaves=1,sentinels=3,加粗的为shardname的名称

获取到shardname后,在主的redis上执行/opt/redis-2.8.8/src/redis-cli -h setinelip -p 26379 sentinel failover eppsaps_master_X

命令执行完以后,主redis会切换为备。因为redis切换需要同步数据,要确认数据同步完成才算主备切换完成,通过以下信息确认是否同步完成:

备redis机器的master_link_status值为up;

主redis的master_repl_offset值和备redis的slave_repl_offset相同;

备redis的master_last_io_seconds_ago值小于5

注:进行主备切换前记得先做bgsave操作(在主上进行操作)

​​​​​​​redis主备关系查询

redisuser用户进入任意一台redis机器,./opt/redis/redis-cli info |grep role就可以看出来这台机器是主(master)还是从(slave)

也可以直接执行./opt/redis/redis-cli info查看所有信息

​​​​​​​​​​​​​​redis主备关系查询

redisuser登录redis机器执行./opt/redis/redis-cli info查看所有信息,找到Memory模块:

used_memory:812453648 //数据占用了多少内存(字节)

used_memory_human:774.82M //数据占用了多少内存(带单位的,可读性好)

used_memory_rss:996163584 //redis占用了多少内存

used_memory_peak:833678072 //占用内存的峰值(字节)

used_memory_peak_human:795.06M //占用内存的峰值(带单位的,可读性好)

used_memory_lua:33792  //lua引擎所占用的内存大小(字节)

mem_fragmentation_ratio:1.23  //内存碎片率

mem_allocator:jemalloc-3.2.0  //redis内存分配器版本,在编译时指定的。有libc、jemalloc、tcmalloc这3种

​​​​​​​​​​​​​​redis根据keyname以及type查value

根据指定的key值,获取对应的value:

执行./opt/redis/redis-cli进入如下页面,

字符型的:执行GET KEY_NAME(key值)获取其对应的value,如果key不存在,返回nil,如果存在则返回对应的值

队列:LPOP KEY_NAME

哈希 HGET KEY_NAME field,也可用hGetAll("KEY_NAME ")

集合: SMEMBERS KEY_NAME返回集合中的所有元素

有序集合ZRANGE KEY_NAME start stop

注:获取所有Key命令:redis-cli keys '*'; 获取指定前缀的key:redis-cli KEYS "edu:*"

​​​​​​​​​​​​​​清空redis、根据keyname删除key

执行./opt/redis/redis-cli进入如下页面,

 

清除整个redis数据(苏宁的重命名为:sgflushall):FLUSHALL

清除一个数据库:FLUSHDB

删除单个key:

在cli界面执行del key_name命令即可

删除多个:

./opt/redis/redis-cli keys "*" | xargs redis-cli del(删除所有的key)

./opt/redis/redis-cli keys "edu:*" | xargs redis-cli del (删除已edu开头的key)

注:如果要指定 Redis 数据库访问密码,使用下面的命令./opt/redis/redis-cli -a password keys "*"| xargs redis-cli -a password del;

如果要访问 Redis 中特定的数据库,使用下面的命令->./opt/redis/redis-cli -n 0 keys "*"| xargs redis-cli -n 0 del

​​​​​​​​​​​​​​redis主备入库

使用redisuser用户登录所给的redis机器,执行./opt/redis/redis-cli info命令查询出来所给的机器的主备信息

在主的redis上执行./opt/redis/redis-cli -h setinelip -p 26379 info|grep redismasterip;获取所对应机器的shardname(也可以在pcp上查询)

在主的redis上执行./opt/redis/redis-cli -h setinelip -p 26379 sentinel failover eppsaps_master_X

命令执行完以后,主redis会切换为备。因为redis切换需要同步数据,要确认数据同步完成才算主备切换完成,通过以下信息确认是否同步完成:

备redis机器的master_link_status值为up;

主redis的master_repl_offset值和备redis的slave_repl_offset相同;

备redis的master_last_io_seconds_ago值小于5

注:进行主备切换前记得先做bgsave操作(在主上进行操作)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值