阅读 9

redis搞定面试系列—基础篇:redis快速上手

什么是redis

什么是Redis,一般我们都会这样介绍:redis是一个内存型非关系型数据库。这样redis的一个常见的介绍,那么什么是内存型,非关系型呢?

官方是这样介绍的:"Redis is an open source (BSD licensed),in-memory data structure store, used as a database,cache and message broker."

翻译一下就是:Redis是一个开源的、基于内存数据结构存储器,可以用作数据库缓存消息中间件

从以上的解释中,可以总结出来

  1. Redis的数据基于内存存储数据,支持多种数据结构,这就解释了内存型。

    将数据存储在内存中

    1. 优点

      查询效率非常高 ,内存的速率远高于硬盘

    2. 缺点

      服务关闭,内存中的数据会丢失,redis怎么解决呢?

      redis通过持久化机制会将内存中的数据持久化到磁盘中,这就是我们说redis是数据库的原因了,后面会详细的介绍 redis的持久化机制。

  2. 非关系型数据库

    非关系型数据库指的是redis的存储结构,通过key-value的结构存储数据(可以简单的认为是map一样的结构)。

    mysql oracle传统的通过表进行数据存储的数据库,称之为关系型数据库

  3. Redis可以用作,数据库,缓存等

redis的优点

  1. 速度快,Redis使用C语言实现,基于内存,数据的读写效率非常的高,这也是为什么很多系统的缓存功能使用Redis来实现,但是需要明确的是Redis是一个数据库,缓存只是它的一项应用而已。
  2. 单线程模型,所谓单线程模型就是每一个请求都会有一个全新的线程来进行处理,这一点类似于Struts2,每一个请求都会有一个新的线程来进行处理。这样做的好处就是避免了线程频繁切换带来的系统开销,同时也避免了让人头疼的多线程问题。
  3. 使用了非阻塞I/O,不在网络上浪费时间,进一步提高了效率。
  4. 支持多种的数据类型,并且每一种数据类型都提供了丰富的操作命令,适用于很多特殊的场景,并且支持自定义命令创建个性化的操作命令。

安装redis(Linux)

  1. 安装gcc

    yum install gcc
    
    解释:redis是用c语言编写,需要先使用gcc编译redis
    复制代码
  2. 上传 解压redis安装包

    tar -zxvf redis-3.0.7.tar.gz
    复制代码
  3. 编译

    命令:make
    复制代码

    1571385896450

    注意:在redis的目录中执行make命令

    安装成功的标志

    1571385952629

  4. 启动redis服务端

    进入redis安装目录的src目录
    
    使用./redis-server ../redis.conf 启动redis数据库
    复制代码

    1571386111323

  5. 启动redis命令行客户端

    新Linux操作窗口中 执行 ./redis-cli
    
    该窗口就是redis的命令行窗口 可以执行redis中的命令
    复制代码

    1571386200275

  6. 简单的测试redis存取命令

    1571386436636

基本使用(常见数据结构的命令)

redis的数据结构

redis的数据存储结构:redis本身采用key-value的方式存储数据

  • key的类型是string
  • value的类型包括5种:string set list zset(可排序,打分) hash

实际上Redis并没有直接使用这些数据结构来实现key-value数据库,而是基于这些数据结构创建了一个对象系统,redis数据库里面的每个键值对都是由对象组成的,其中

  1. 数据库的键总是一个字符串对象
  2. 数据库键对应的值可以是字符串对象,列表对象,哈希对象,集合对象,有序集合对象这五种对象中的一个

也就是说:当我们执行了 set username zhangsan 命令之后,在redis内部会生成两个字符串对象,分别做 key 和 value 存储数据

redis的命令

在命令行客户端中写入命令可以用来操作redis,常见的命令如下:

Redis 命令参考:doc.redisfans.com/

try Redis(不用安装Redis即可体验Redis命令):try.redis.io/

redis常用命令汇总

value的数据结构不同,对应支持的命令不同

string
命令 示例 作用
set set k v 添加一个key-value
get get k 根据key获取value
exists exists k 判断key是否存在
del del k 根据key删除对应数据该命令适用于其他4个数据结构
mset mset k1 v1 k2 v2 一次性设置多个key-value
mget mget k1 k2 一次性根据多个key获取多个value
incr incr k1 对该key对应的value(数字),进行加1
decr decr k1 对该key对应的value(数字),进行减1

应用场景:缓存查询结果(json或者序列化) 用户访问记录 例如:通过记录ip-访问次数来显示ip的访问 统计粉丝数、点击次数

set
命令 示例 作用
sadd sadd k v 向key对应的set集合中添加一个元素
smembers smembers k 获取set集合中所有元素
scard scard k 获取set集合中元素个数
spop spop k 删除set集合中任意一个元素
srem srem k v 删除set集合中指定元素
sdiff sdiff k1 k2 返回k1对应集合中去重和k2对应集合重复部分
sinter sinter k1 k2 获取k1对应set集合和k2对应set集合交集
sunion sunion k1 k2 获取k1对应set集合和k2对应set集合的并集

应用场景:查找共同好友

zset (sorted_set)
命令 示例 作用
zadd zadd k 分数 v 在key对应的有序集合中添加一个新元素
zrevrange zrevrange k start stop 获取下标区间的元素,按照分数正向排名
zcard zcard k 返回key对应的zset集合元素个数
zrem zrem k v 删除key对应集合中value元素
zrevrank zrevrank k v 获取value在key对应集合中排名(从0开始)
zscore zscore k v 获取value在key对应的zset集合中的分数
zincrby zincrby k n v 对key对应的set集合中的v进行加分操作

应用场景:排行榜

hash
命令 示例 作用
hset hset k k1 v1 向hash中添加一个k-v
hget hget k k1 根据k获取hash,在根据k1从hash中获取v
hgetall hgetall k 获取k对应的hash中所有的k-v
hdel hdel k k1 删除k对应的hash中的k1数据
hkeys hkeys k 获取k对应hash中所有key
hvals hvals k 获取k对应hash中所有的value
hexists hexists k k1 判断hash中是否存在对应的k

应用场景:存储对象,便于修改 分区缓存

list
命令 示例 作用
rpush rpush k v 从list集合右侧添加一个元素
rpop rpop 删除list集合右侧的元素
lpush lpush k v 从list集合左侧添加一个元素
lpop lpop 删除list集合左侧的元素
llen llen k 获取list集合长度
lrange lrange k start stop 获取liist集合下标中范围的元素
lindex lindex k 下标 获取list集合中某个下标的元素

应用场景:关注列表、消息队列

其他
命令 示例 作用
seletct database的编号 select 0 redis默认16个库选择指定库操作,默认从0开始
flushdb flushdb 清空当前操作的库
flushall flushall 清空redis所有库
expire key expire key 设置key存活时间的秒
ttl key ttl key 查看key对应的数据的存活时间
pexpire key pexpire key 存活时间的毫秒
pttl key pttl key 查看key对应的数据的存活时间,毫秒单位
keys * keys * 打印所有key
关注下面的标签,发现更多相似文章
评论