redis安装与使用

一、redis的概述

    redis是一种基于键值对的nosql数据库,redis的值可以是由string、hash、list、set、zset(有序集合)、bitmaps(位图)、HyperLogLog、Geo(地理信息定位)等多种数据结构和算法组成,redis的所有数据都存放在内存中,读写速率很高。并且redis还可以将内存的数据利用内存和快照的形式保存到硬盘上。

1redis的特性

(1)速度快

     数据存放在内存中、redis由c语言编写、redis使用单线程架构

(2)基于键值对的数据结构服务器

    提供了字符串、哈希、列表、集合、有序集合等五种数据结构、并在字符串的基础上演变出了位图和HyperLogLog两种数据结构。

(3)功能丰富

    键过期功能、可以用来实现缓存

    发布订阅功能、可实现消息队列功能

    支持lua脚本功能、可创造出新的redis命令

    提供了简单事物功能、在一定程度上保证了事务特性

    提供了流水线(Pipeline)功能、减少了网络开销

(4)简单稳定

    不需要依赖于操作系统的类库

(5)客户端语言多

    提供了简单的TCP通信协议,主流的变成语言都支持。

(6)持久化

    有RDB和AOF两种持久化的方式

(7)主从复制

    一个主服务器可以有多个复制的副本

(8)高可用和分布式

    2.8版本提供了高可用性实现Redis Sentinel,3.0版本提供了分布式实现Redis Cluster

2redis的使用场景

(1)缓存

(2)排行榜系统

(3)计数器应用

(4)消息队列

(5)消息队列系统

3redis的发布版本

    Redis版本命名规则参照Linux内核命名规则,版本号第二位为奇数则为非稳定版本,为偶数则为稳定版本。

Redis主要版本:

(1)Redis 2.6

     2012年发布,增加的主要功能有服务端支持Lua脚本,去掉虚拟内存相关功能、放开客户端连接数硬编码的限制、重构大量核心代码

(2)Redis 2.8

     2013年11月发布,增加的主要功能有:添加部分主从复制的功能、尝试性支持ipv6、可通过config set命令设置maxclients、可以绑定过个ip、设置明显进程号、正式启用Redis sentinel。

(3)Redis 3.0

     2015年4月发布,增加的主要功能有:redis分布式的实现、优化小内存访问、lru算法提升、migrate连接缓存大幅提升键迁移速度

(4)Redis 3.2

     2016年5月发布,增加的主要功能有:添加GEO相关功能、SDS在速度和节省空间上做了变化、支持用upstart或者systemd管理redis进程。新的list编码类型quicklist、优化了Redis崩溃后的相关报告。

(5)Redis 4.0

     Redis4.0的新特性:提供了模块系统方便第三方开发者拓展redis的功能,优化了之前版本中主切换引起全量复制的问题、提供了新的缓存提出算法、提供非阻塞del和flushall/flushdb功能、提供了ADB-AOF混合持久化格式、提供了交互数据库功能,redis cluster兼容NAT和docker。

二、redis的安装

1redis的安装

#安装gcc编译软件
]# yum -y install gcc
#下载并解压缩redis安装包
]# wget http://download.redis.io/releases/redis-3.2.12.tar.gz
]# tar -xf redis-3.2.12.tar.gz
]# cd redis-3.2.12
#编译并安装redis
]# make
]# make install
#进入redisunils目录使用脚本快速设置redis
]# cd utils/
]# ./install_server.sh

2redis基本配置

(1)修改让redis启动后在后台运行

      Redis安装完成后再启动redis是默认会在前台运行,需要修改配置文件中的daemonize yes为daemonize no

(2)修改redis绑定的网卡地址

      修改配置文件中的bind,多个地址可以空格隔开,绑定本地全部地址使用0.0.0.0                          

(3)port

          port用于指定redis启动时的端口

(4)logfile

          指定redis日志文件存放位置

(5)dir

          指定redis的存放持久化文件的位置。

         修改redis的配置可以通过修改配置文件修改,也可以在redis中通过命令的方式修改。

3redis的启动与停止

(1)启动redis

1)使用默认配置启动redis,如果运行了快速设置脚本也可以通过service服务启动

 #使用默认配置启动redis
  ]# redis-server

2)启动时设置加上修改的配文件

    Redis-server –configkey1 configValue1 –configkey2 configVaule2

  # 如启动时修改端口
  ]# redis-server –port 6666

3)通过制定配置文件启动redis

    Redis-server /path/redis.conf

 # 通过指定配置文件启动redis
 ]# redis-server /etc/redis/6379.conf

4)在centos7中将redis加入systemd中

    在/lib/systemd/system目录下创建一个脚本文件redis.service

]# cat /lib/systemd/system/redis.service
[Unit]
Description=Redis
After=network.target
[Service]
ExecStart=/usr/local/bin/redis-server /usr/local/redis/redis.conf  --daemonize no
ExecStop=/usr/local/bin/redis-cli -h 127.0.0.1 -p 6379 shutdown
[Install]
WantedBy=multi-user.target

     将redis加入systemd管理

# 为刚才创建的脚本创建软连接,以方便系统初始化时自动启动服务,即将redis加入开机自启动。
]# ln -s /lib/systemd/system/redis.service /etc/systemd/system/multi-user.target.wants/redis.service
# 刷新配置,使刚加入的服务能被系统识别
]# systemctl daemon-reload
# 启动redis
]# systemctl start redis

(2)关闭redis

    Redis关闭时建议使用shutdown命令关闭,也可以使用service以及systmctl命令关闭,执行方式如下

]# redis-cli shutdown

    如果关闭时使用杀死进程的方法,可能会导致数据的丢失。

三、redis常用操作

1、redis-cli的使用

    Redis-cli有很多参数,可以通过”redis-cli --help”命令查看,常用的参数有:

    -r:将一个命令执行多次

    -i:每个几秒执行一次命令

    -x:从标准的输入读取数据作为redis-cli的最后一个参数

    -c:连接redis cluster节点是使用

    -a:输入密码时使用

    --scan/--pattern:扫描指定的键,相当于scan命令

    --save:获取当前redis节点的更新操作

    --rdb:请求redis实例生成并发送RDB持久化文件,保存在本地

    --pipe:将命令封装成redis通信协议定义的数据格式,批量发送给redis执行。

    --bigkesy:使用scan命令对redis的键进行采样,从中找到内存占用大的键值。

    --latency:用于检测网络延迟,有三个选项,分别为:

           --latency:测试客户端到目标redis的网络延迟

           --latency-history:以分时段的形式了解延迟信息

           --latency-dist:使用统计图表形式从控制台输出延迟统计信息

    --stat:实时获取redis的重要统计信息

    --no-raw:返回原始的结果

    --raw:返回格式化后的结果

2、redis-server的使用

    除了启动redis外,还可以用来检测当前系统能否稳定的分配指定的内存给redis使用。

    选项:--test-memory

# 检测当前系统能否分配512M内存给redis使用
[root@localhost ~]# redis-server --test-memory 512

3、redis-benchmark的使用

    redis-benchmark可以为redis做基准性能的测试,如果在一个空的redis上执行redis-benchmark会创建三个键,常用的选项有:

    -c:客户端的并发数量

    -n:客户端的请求总量

    -q:仅显示requests per second信息

# 对redis做压力测试,200个客户端同时请求redis,共请求20000次
[root@localhost ~]# redis-benchmark -c 200 -n 20000 -q

    -r:配合前面参数,可以向redis插入更多的键

# 向redis插入更多的键,-r 10000代表只对key和count后四位做随机处理
[root@localhost ~]# redis-benchmark -c 100 -n 2000 -r 10000

    -p:每个请求pipline的数据量

    -k:客户端是否使用keepalive,1为使用,0为不使用,默认为1

    -t:对指定命令做基准测试

    --csv:将结果按照csv格式输出

四、redis的一些基本操作命令

    在操作前先插入一些数据

127.0.0.1:6379> set name dayi123
OK
127.0.0.1:6379> set age 26
OK
127.0.0.1:6379> rpush aihao xiezi paobu kanshu luyou
(integer) 4

1、全量遍历键

    命令:keys pattern

    pattern使用的是glob风格的通配符

# 查看当前redis的多有键
127.0.0.1:6379> KEYS *
1) "aihao"
2) "age"
3) "name"
# 批量删除键
[root@localhost ~]# redis-cli keys name[0-9] | xargs redis-cli del   
(integer) 2

2、查看键总数:dbsize

127.0.0.1:6379> DBSIZE
(integer) 3

    Keys *会遍历所有的键,并将所有的键列出来,dbsize在计算键总数是不会遍历所有的键。在生产中,有大量的键时,查看键总数不建议使用keys *。

3、查看键是否存在:exists key

#检查存在的键时返回1
127.0.0.1:6379> EXISTS age
(integer) 1
#检查不存在的键时返回0
127.0.0.1:6379> EXISTS ages
(integer) 0

4、删除键:del key1 key2

#删除键时,可以同时删除多个键
127.0.0.1:6379> DEL age
(integer) 1

5、设置键过期

    命令:expire key seconds

    其他相关命令:

       查看剩余时间:TTL key

                                PTTL key

       取消键过期时间:PERSIST key

# 设置name 5秒后过期,过期后会自动删除
127.0.0.1:6379> EXPIRE name 20
(integer) 1 
# 查看键的剩余过期时间
127.0.0.1:6379> ttl name
(integer) 2
# 使用pttl查看可以精确到毫秒级
127.0.0.1:6379> PTTL name
(integer) 15075
# 取消过期
127.0.0.1:6379> PERSIST name
(integer) 1

    Redis不支持对列表、哈希等二级数据结构设置过期时间。

6、查看键的数据结构类型:type key

127.0.0.1:6379> TYPE name
string
127.0.0.1:6379> TYPE aihao
List

7、键重命名

    命令:RENAME key newkey

               RENAMENX key newkey

    RENAME和RENAMENX的区别是如果newkey存在时,不会覆盖newkey。

127.0.0.1:6379> MGET name1 name2 name3 name4
1) "abc"
2) "def"
3) "123"
4) "456"
# 使用rename重名民name1为name2
127.0.0.1:6379> RENAME name1 name2
OK
# 使用namenx重命名name3为name4时失败
127.0.0.1:6379> RENAMENX name3 name4
(integer) 0
# 重新获取四个键的值
127.0.0.1:6379> MGET name1 name2 name3 name4
1) (nil)
2) "abc"
3) "123"
4) "456"

8、随机返回一个键

    命令:RANDOMKEY

# 随机获取一个key
127.0.0.1:6379> RANDOMKEY
"name2"

9、迁移键

(1)使用move命令迁移

    命令:MOVE key db

    Move命令主要用于在redis内部对key进行库之间的迁移。

(2)使用dump+restore命令迁移

    Dump+restore可以实现在不同的redis实例之间进行数据库的迁移,迁移分为两步:首先,在源redis上,dump命令会将键值序列化,格式采用的事RDB格式;在目标redis上,restore命令将dump命令序列化的值进行复原。命令格式分别如下:

    DUMP key

    RESTORE key ttl serialized-value [REPLACE]

    参数:ttl代表过期时间,为0则表示不过期

# 在源redis上将键name序列化
[root@localhost ~]# redis-cli set name dayi123
OK
[root@localhost ~]# redis-cli dump name
"\x00\adayi123\a\x00>\xccK\xb2CP\xe5C"
# 在目标redis上将序列化复原
[root@localhost ~]# redis-cli -h 192.168.16.128
192.168.16.128:6379> RESTORE name 0 "\x00\adayi123\a\x00>\xccK\xb2CP\xe5C"
OK
192.168.16.128:6379> get name
"dayi123" 

(3)使用migrate迁移

    命令:MIGRATE host port key| destination-db timeout [COPY] [REPLACE] [KEYS key]

    参数说明:

       Host:目标redis地址

       Port:目标redis端口

       Key:需要迁移的键,如果迁移多个键,此处写””,命令最后写迁移的键名

       destination-db:目标redis数据库(哪个库)

       timeout:迁移超时时间

       [COPY]:迁移后不删除源键

       [REPLACE]:如果目标库存在此键则会覆盖

       [KEYS key]:需要迁移的键

# 将当前redis的age键迁移至192.168.16.128并保留当前库的age键
127.0.0.1:6379> MIGRATE 192.168.16.128 6379 age 0 1000 copy replace
OK
127.0.0.1:6379> exit
[root@localhost ~]# redis-cli -h 192.168.16.128 get age
"26"
# 将当前redis的多个不同类型的键迁移至目标redis
127.0.0.1:6379> MIGRATE 192.168.16.128 6379 "" 0 1000 copy replace keys name1 name2 class:1 english
OK
[root@localhost ~]# redis-cli -h 192.168.16.128 
192.168.16.128:6379> KEYS *
1) "age"
2) "english"
3) "name1"
4) "name"
5) "name2"
6) "class:1"

10、渐进式遍历

    命令:SCAN cursor [MATCH pattern] [COUNT count]

    参数:

       Cursor:cursor是一个游标,第一次遍历从0开始,每次遍历都会返回游标值,游 标为0时表示遍历结束

       MATCH pattern:做模式匹配

       COUNT count:每次要遍历的键个数,默认是10

# 遍历所有以na开头的键,每次遍历3个
127.0.0.1:6379> SCAN 3 match na* count 2
1) "15"
2) 1) "name"
   2) "name4"

    除scan外,redis还提供了面向hash类型,集合类型,有序集合的扫描遍历命令,解决如hgetall、smembers、zrang可能产生阻塞的问题,对应的命令分别为hscan、sscan、zscan。

    渐近式遍历可以有效的解决keys命令可能产生的阻塞问题。

11redis数据库管理命令

(1)切换数据库

    命令:SELECT index

    Redis默认有16个数据库,用数字作为多个数据库的实例。

# 切换到第二个实例数据库
127.0.0.1:6379> SELECT 2
OK
127.0.0.1:6379[2]>

(2)清空数据库

    命令:FLUSH/ FLUSHALL

   flush用于清空当前数据库,flushall清空所有数据库。这两个命令在生产中慎用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值