Redis初体验

Redis初体验

一、Redis简介

REmote DIctionary Server(Redis) 是一个开源的,基于 key-value键值对的持久化的非关系型数据库存储系统。

它支持的数据存储类型包括:字符串 (String), 哈希 (Map), 列表 (list), 集合 (sets) 和 有序集合(sorted sets) 等。

在实际项目中可以用 Redis 做缓存或消息服务器,Redis 也是目前互联网中使用比较广泛的非关系型数据库。

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

为了满足高性能,Redis 采用内存(in-memory)数据集(Dataset),根据使用场景,可以通过每隔一段时间转储数据集到磁盘,或者追加每条命令到日志来持久化。持久化也可以被禁用,如果你只是需要一个功能丰富、网络化的内存缓存。

Redis 官方网站:redis官网

1. Redis特点

数据模型

Redis 数据模型不仅与关系数据库管理系统(RDBMS)不同,也不同于任何简单的 NoSQL 键-值数据存储。Redis 数据类型类似于编程语言的基础数据类型,因此开发人员感觉很自然,每个数据类型都支持适用于其类型的操作,受支持的数据类型包括:

  • String(字符串)
  • Hash(哈希)
  • List(列表)
  • Set(集合)
  • Zset(Sorted Set:有序集合)
关键优势

Redis 的优势包括它的速度、对富数据类型的支持、操作的原子性,以及通用性:

  • 性能极高,它每秒可执行约 100,000 个 Set 以及约 100,000 个 Get 操作;
  • 丰富的数据类型,Redis 对大多数开发人员已知的大多数数据类型提供了原生支持,这使得各种问题得以轻松解决;
  • 原子性,因为所有 Redis 操作都是原子性的,所以多个客户端会并发地访问一个 Redis 服务器,获取相同的更新值;
  • 丰富的特性,Redis 是一个多效用工具,有非常多的应用场景,包括缓存、消息队列(Redis 原生支持发布/订阅)、短期应用程序数据(比如 Web 会话、Web 页面命中计数)等。

2. Redis的缺陷与陷阱

内存管理开销大(不要超过物理内存的 3/5)。buffer io 可能会造成系统内存溢出(OOM-Out of Memory)

3. Redis的应用场景

  • 新浪(sina)使用 redis:
    • 应用程序直接访问 Redis
    • Redis 当做内存,先访问 redis,redis 没有数据或访问失败时访问 MySql
    • 二次开发后实现 MySql 和 Redis 互相同步
  • MySql 数据通过 RBR 解析 BINLOG 同步到 redis 中实现关系型数据转变成队列数据
  • Redis 提供特定数据的读写,通过 replication 接口同时写入到 MySql

二、Redis 安装

本笔记中,我们选择在 VMvare 虚拟机中安装 Redis(CentOS 7)。如果您有自己的阿里云服务器,也可以在阿里云中安装。只要能 Ping 的通云主机或者虚拟机的 IP,并在虚拟机或者云主机中放行对应的端口(或者关掉防火墙)即可访问 Redis。

下面来介绍一下 Redis 的安装过程。

1. 安装gcc编译环境

安装 Redis 时需要编译,我们要事先安装好 gcc 编译,命名如下所示。阿里云主机已经默认安装了 gcc,就无需这一步。

yum install gcc-c++

2. 下载 Redis

下载地址:Redis 版本下载

有两种方式下载安装包,一种是到官网上下载,并将安装包拷贝到 Centos 中,另一种方法是直接使用 wget 下载:

wget http://download.redis.io/releases/redis-3.2.8.tar.gz

如果没有安装过 wget,可以通过如下命令安装:yum install wget

3. 解压安装

解压安装包:

tar -vzxf redis-3.2.8.tar.gz

将解压的文件夹 redis-3.2.8 放到 /usr/local/ 目录下(一般安装软件都会放在 /usr/local 下)。之后进入 /usr/local/redis-3.2.8/ 文件夹下,执行 make 命令即可完成安装。

如果 make 命令执行失败,可尝试如下命令:

make MALLOC=libc
make install

4. 修改配置文件

安装成功之后,需要修改一下配置文件,包括允许接入的 IP 、允许后台执行、设置密码等等。

打开 Redis 配置文件:vim redis.conf,在命令模式下输入 /bind 查找 bind 配置,按 n 查找下一个,找到配置后,将 bind 配置成 0.0.0.0,允许任意服务器访问 Redis,即:

bind 0.0.0.0

使用同样的方法,将 daemonize 改成 yes(默认为 no),允许 Redis 在后台执行。

将 requirepass 注释打开,并设置密码为 123456(密码自己设置)。

5. 启动 Redis

在 Redis-3.2.8 目录下,指定刚刚修改好的配置文件 redis.conf 来启动 Redis :

./redis-server
./redis-server ${redis.conf}
./redis-server --port ${port}
-- 后台启动
./redis-server &

再启动 Redis 客户端:

./redis-cli
./redis-cli -p ${port}
./redis-cli -h ${ip}
./redis-cli -a ${password}
./redis-cli -p ${port} -h ${ip} -a ${password}

二、Redis 基础命令

1. Redis 基础配置命令

  • info 查看redis基础信息
  • select ${database} 切换使用database
  • flushdb 清除当前database的key
  • flushall 清除所有database的key
  • dbsize 当前database的key的size
  • keys * 查看当前database的key内容
  • save 保存key
  • quit 退出

2. Redis 键命令

  • keys *
  • del ${key}
  • exists ${key}
  • ttl ${key} 查看当前key的剩余生存时间
  • expire ${key} ${time} 设置当前key的过期时间
  • type ${key} 查看key值的数据类型
  • randomkey 随机key
  • rename 重命名key
  • renamenx 重命名key(先校验后操作)

3. Rdis 数据结构

Redis 数据结构

3.1 字符串String
  • set ${key} ${value}
  • setex ${key} ${time} ${value} 添加key-value并且设置过期时间(单位秒)
  • psetex ${key} ${time} ${value} 添加key-value并且设置过期时间(单位毫秒)
  • get ${key}
  • getrange ${key} ${start} ${end} 获取指定key的指定范围的值
  • getset ${key} ${newvalue} 重新设置key值并且返回原key值
  • mset ${key} ${value} ... 同时设置多个key-value
  • mget ${key} ${key}... 获取多个key值
  • setnx ${key} ${value} 当且只有key不存在时,设置key-value成功
  • msetnx ${key} ${value} ...
  • strlen ${key} 获取key值的长度
  • incr ${key} 数值型key自增
  • incrby ${key} ${stepsize} 指定步长的数值型key自增
  • decr ${key} 数值型key自减
  • decrby ${key} ${stepsize} 指定步长的数值型key自减
  • append ${key} ${value}
3.2 哈希Hash
  • hset ${obj} ${key} ${value} 设置hash值
  • hexists ${obj} ${key}
  • hget ${obj} ${key}
  • hgetall ${obj} 获取hash对象所有的key-value
  • hkeys ${obj} 获取hash对象所有的key
  • hvals ${obj} 获取hash对象所有的value
  • hlen ${obj} 获取hash对象中key的数量
  • hmget ${obj} ${key} ${key}...
  • hmset ${obj} ${key} ${value}...
  • hdel ${obj} ${key} ${key}... 删除指定hash中的key-value
  • hsetnx ${obj} ${key} ${value}
3.2 列表List
  • lpush ${list} ${element} ${element} ...
  • llen ${list} 返回列表list的元素数量
  • lrange ${list} ${start} ${end} 获取list中指定范围的值
  • lset ${list} ${index} ${value} 设置指定角标的list值
  • lindex ${list} ${value} 获取指定value值的角标
  • lpop ${list} 移除指定list的最左边一个元素并返回
  • rpop ${list} 移除指定list的最右边一个元素并返回
3.3 无序集合Set
  • sadd ${set} ${element} ${element} ...
  • scard ${set} 返回集合set的元素数量
  • smembers ${set} 查看集合set的元素内容
  • sdiff ${set1} ${set2} 返回set1与set2的差集
  • sinter ${set1} ${set2} 返回set1与set2的交集
  • sunion ${set1} ${set2} 返回set1与set2的并集
  • srandmember ${set} ${num} 返回集合中一个或多个随机元素
  • sismember ${set} ${element} 判断元素是否在指定集合中存在
  • srem ${set} ${element} ${element} ... 移除指定集合中的元素
  • spop ${set} 移除指定集合中的元素并且返回移除的一个随机元素
3.4 有序集合ZSet
  • zadd ${zset} ${score} ${ele} ...
  • zcard ${zset} 查看zset中的元素个数
  • zscore ${zset} ${ele} 查看指定元素的排序分数
  • zcount ${zset} ${score~} 指定区间分数,返回zset中符合区间的元素
  • zrank ${zset} ${ele} 返回zset集合中指定元素的索引
  • zincrby ${zset} ${step-score} ${ele} 增加指定元素的score
  • zrange ${zset} ${start} ${end} 获取集合中指定范围的元素
  • zrange ${zset} ${start} ${end} withscores 获取集合中指定范围的元素并显示元素相应得分
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值