redis基础入门

是什么

Redis(REmote DIctionary Server)是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。

与mysql的对比

redis与mysql不是非此即彼的关系,在实际的使用场景中,也是二者配合使用。

  1. 数据库类型
    mysql是关系型数据库,主要用于存放持久化数据,将数据存储在硬盘中,读取速度较慢。

redis是NOSQL,即非关系型数据库,也是缓存数据库,即将数据存储在缓存中,缓存的读取速度快,能够大大的提高运行效率,但是保存时间有限

  1. 运行机制
    mysql每次请求访问数据库时,都存在着I/O操作,如果反复频繁的访问数据库,有以下问题:
  • 会在反复链接数据库上花费大量时间
  • 反复的访问数据库会导致数据库的负载过高

redis是一款缓存数据库,用于存储使用频繁的数据,这样减少访问数据库的次数,提高运行效率。

  1. 需求
    mysql用于持久化的存储数据到硬盘,功能强大,但是速度较慢

redis用于存储使用较为频繁的数据到缓存中,读取速度快

与memcached的对比

二者都是将数据存放在内存中,都是内存数据库。效率都很高,都可以与其他关系型数据库配合使用。

区别:

  • Redis不仅支持简单的k/v类型的数据,同时还提供list,set,hash, zset等数据结构的存储
  • Redis支持数据的备份,即master-slave模式的数据备份
  • Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用
redis优缺点(相对而言)

优点:

  • 读写性能优异(都是内存操作),Redis能读的速度是110000次/s,写的速度是81000次/s
  • 支持数据持久化,支持AOF和RDB两种持久化方式
  • 支持主从复制,主机会自动将数据同步到从机,可以进行读写分离
  • 支持string、hash、set、zset、list多种数据类型,操作方便
  • 丰富的特性 pub/sub,key过期策略,事务,支持多个DB等
  • Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来

缺点:

  • Redis数据都保存在内存中,对于单台机器,存储的数据量与内存大小相关,对于大量数据可能导致内存增长过快
  • 修改配置文件后需要重启,将硬盘中的数据加载进内存,时间比较久。在这个过程中,redis不能提供服务
  • Redis的主从复制采用全量复制,需要确保主机有足够多的空余内存。网络波动会造成主机和从机间的一次全量的数据复制,影响实际系统运营
  • Redis较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。为避免这一问题,运维人员在系统上线时必须确保有足够的空间,这对资源造成了很大的浪费。
  • Redis不具备自动容错和恢复功能,主机从机的宕机都会导致前端读写请求失败,主机宕机前有部分数据未同步到从机,会引入数据不一致的问题
怎么用

安装

支持各种系统和平台,下载安装请参考相关文档。

启动

启动服务,如果安装后已经配置了系统的环境变量(一般安装时会自动配置),直接运行如下命令启动redis服务:

# Win
redis-cli.exe

#Linux
./redis-server

也可以在命令后面加上配置文件名,指定启动时使用的配置文件,默认使用安装路径下的redis.conf

使用

启动客户端即可使用redis(以下以Linux下为例):

% ./redis-cli
redis> set foo bar
OK
redis> get foo
"bar"

可以通过客户端的ping命令查看redis是否已经启动:

redis 127.0.0.1:6379> ping
PONG
配置

redis的服务端依靠配置文件设置策略,这里简要介绍常用配置。

配置项默认值说明
port6379指定 Redis 监听端口,一般不修改
bind127.0.0.1绑定的主机地址
savesave 900 1
save 300 10
save 60 10000
指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合

可以直接修改配置文件或者使用客户端命令进行配置。

  1. 命令行方式
# 查看配置信息

redis 127.0.0.1:6379> CONFIG GET loglevel
1) "loglevel"
2) "notice"

# 修改配置

redis 127.0.0.1:6379> CONFIG SET loglevel "notice"
OK
redis 127.0.0.1:6379> CONFIG GET loglevel

1) "loglevel"
2) "notice"

命令行支持使用 * 号获取相关或所有配置项。

  1. 修改配置文件

配置文件名为redis.conf,一般位于安装路径下。

直接修改即可,保存后需要重启服务:service redis restat

一个例子

redis提供了对各种语言支持的客户端,详细内容可参考官网介绍:https://redis.io/clients

这里以hiredis为例,介绍c++对redis的操作。

hiredis is the official C client. Support for the whole command set, pipelining, event driven programming.

hiredis源码及介绍:https://github.com/redis/hiredis

安装后即可在c/c++中使用hiredis操作redis数据库,以下代码完成对redis的连接和操作。

int main(void)
{
    redisReply *reply;

    signal(SIGPIPE, SIG_IGN); //捕捉程序收到数据包时候的信号

    /* 同步接口 */
    cout << "begin sync api test" << endl;
    redisContext *c = redisConnect("127.0.0.1", 6379);
    if (c == NULL || c->err)
    {
        if (c)
        {
            cerr << "Error: " << c->errstr << endl;
        }
        else
        {
            cerr << "Can't allocate redis context" << endl;
        }
        return -1;
    }
    /* 登录redis */
    reply = (redisReply *)redisCommand(c, "AUTH password");
    if (reply->type == REDIS_REPLY_ERROR)
    {
        cout << "redis 登录时认证失败[" << reply->type << "]: " << reply->str << endl;
        freeReplyObject(reply);
        return -2;
    }
    freeReplyObject(reply);

    reply = (redisReply *)redisCommand(c, "select 1");
    cout << "set reply: " << reply->str << endl;
    freeReplyObject(reply);

    reply = (redisReply *)redisCommand(c, "SET atest b");
    cout << "set reply: " << reply->str << endl;
    freeReplyObject(reply);

    reply = (redisReply *)redisCommand(c, "get atest");
    cout << "get reply: " << reply->str << endl;
	freeReplyObject(reply);
	redisFree(c);
	cout << "sync api test done!" << endl;

	return 0;
}

详细代码及更多操作请参考 https://github.com/guotianqing/redis_demo

总结

redis安装、操作和使用都很简单,目前也比较流行,支持的客户端也是非常多的,所以技术资料也很多。

在实际使用中,只要掌握了基本的使用方法,就可以随意操作,也可以尝试各种不再的客户端连接到redis。

当然也可以使用redis做一些很cool的事情,我也正在学习中。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值