ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

初始Redis(入门篇)

初始Redis(入门篇)

目录

什么是Redis

Redis特性

速度快

丰富的功能

客户端语言多

持久化

主从复制

Redis可以做什么

缓存

排行榜系统

计数器应用

消息队列系统

Redis安装

centos7安装

Redis重要文件

Redis的使用

Redis通用命令

set   get

keys

 exists

del

expire


什么是Redis

Redis是⼀种基于键值对(key-value)的NoSQL数据库,与很多键值对数据库不同的是,Redis
中的值可以是由string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、Bitmaps(位图)、HyperLogLog、GEO(地理信息定位)等多种数据结构和算法组成,因此Redis可以满⾜很多的应⽤场景,⽽且因为Redis会将所有数据都存放再内存中,所以它的读写性能⾮常惊⼈。不仅如此,Redis还可以将内存的数据利⽤快照和⽇志的形式保存到硬盘上,这样在发⽣类似断电或者机器故障的时候,内存中的数据不会“丢失”。除了上述功能以外,Redis还提供了键过期、发布订阅、事务、流⽔线、Lua脚本等附加功能。总之,如果在合适的场景使⽤Redis,它就会像⼀把瑞⼠军⼑⼀样所向披靡。

Redis特性

速度快

正常情况下,Redis的速度是非常快的,官方给出的速度是10万/秒,当前也是取决于机器的性能,这里不考虑机器的性能,我们只是分析一下是什么造就了Redis拥有如此快的速度.

  1. 高效的数据结构 redis使用动态字符串,哈希表,List集合,双向链表,压缩列表,和跳跃表等数据机构来实现数据存储,这样能将数据高效的存储和读取出来.

  2. 基于内存的操作, redis所有的操作都是基于内存的,并且大多数操作都是简单的存储和获取,而存取的大部分操作都消耗在I\O上,而I\O操作最快的就是内存了.

  3. 多路I\O复用模型, 多路指的是多个网络连接,复用指的是复用一个线程,这使得redis在单线程的基础上处理多个并发请求.多路复用内部采用epoll代理来实现,epoll会同时监测多个流的I\O事件,当没有事件时,就会阻塞.

  4. 单线程执行,单线程执行可以避免因为多个线程过度的抢占和调度而产生的时间.

丰富的功能

除了5中基本的数据结构,Redis还提供了很多的额外的功能.

1. 提供了键过期功能,用于实现缓存

2. 提供了发布订阅功能,用于使用消息系统

3. 提供了lua脚本功能,可以使用lua创造出新的Redis命令

4. 提供了事务管理功能,能在一定程度上保证事务特性

客户端语言多

Redis提供了简单的TCP协议,很多编程语言都可以轻松的接入Redis,,所以支持Redis客户端的语言也非常多,包括C、C++、Java、PHP、Python、NodeJS等.

持久化

因为Redis的数据是存储在内存中的,所以要是发生断电等极端情况,数据就会丢失,但是对于Redis来说,数据是不会丢失的,因为Redis提供了两种持久化功能:RDB,AOF,即可以使用这两种策略将内存的数据存储到硬盘中.这样就保持了数据了的持久化.

主从复制

Redis提供了复制功能,实现了多个数据的Redis副本.复制功能是分布式Redis的基础


Redis可以做什么

缓存

缓存机制几乎在所有的大型网站都有运用,合理的使用缓存不仅可以提高数据访问的速度,而且能够有效的降低后端数据源的压力.

一个合理的缓存设置能够为一个网站提供稳定的的使用体验.

排行榜系统

对于某些网站需要提供一个排行榜的功能,Redis提供了列表和有序集合的结构,能够轻松的实现排行榜功能.

计数器应用

计数器在⽹站中的作⽤⾄关重要,例如视频⽹站有播放数、电商⽹站有浏览数,为了保证数据的
实时性,每⼀次播放和浏览都要做加1的操作,如果并发量很⼤对于传统关系型数据的性能是⼀种挑
战。Redis天然⽀持计数功能⽽且计数的性能也⾮常好,可以说是计数器系统的重要选择。

消息队列系统

消息队列系统可以说是⼀个⼤型⽹站的必备基础组件,因为其具有业务解耦、⾮实时业务削峰等
特性。Redis提供了发布订阅功能和阻塞队列的功能,虽然和专业的消息队列⽐还不够⾜够强⼤,但是对于⼀般的消息队列功能基本可以满⾜

Redis安装

关于Redis的安装,我们将linux系统上进行安装.

centos7安装

使用yum安装

yum install centos-release-scl-rh    # 安装scl源
yum install rh-redis5-redis   #安装redis5

执行上面的两条命令之后,Redis就成功的安装到了我们的centos7上了,接下来我们需要配置Redis.

Redis默认的安装目录是在:/opt/rh/rh-redis5/root/usr/bin里面.

针对可执行程序做符号链接: 

我们由于这个路径太深了,我们可以设置一个符号连接,就类似windows中的快捷方式.

cd /usr/bin    #进入usr/bin目录

## 将redis的可执行程序的符号链接放在当前目录下
ln -s /opt/rh/rh-redis5/root/usr/bin/redis-server ./redis-server   
ln -s /opt/rh/rh-redis5/root/usr/bin/redis-sentinel ./redis-sentinel
ln -s /opt/rh/rh-redis5/root/usr/bin/redis-cli ./redis-cli

 针对配置文件做符号链接:

cd /etc/
ln -s /etc/opt/rh/rh-redis5/ ./redis

然后我们就需要修改配置文件中的属性了.

 我们需要进入设置的符号链接的这个目录:

cd redis/    
vim redis.conf    # 打开配置文件

修改配置文件:

修改IP地址:bind 0.0.0.0

关闭保护模式:protected-mode no

启动守护进程:daemonize yes

设置工作目录:dir /var/lib/redis

设置日志目录:logfile /var/log/redis/redis-server.log


修改完毕之后就保存退出即可.

我们在配置文件中设置了工作目录和日志目录,所以我们需要将这两个目录创建出来.

创建日志目录:mkdir -p /var/log/redis/

创建工作目录:mkdir -p /var/lib/redis

现在我们Redis的配置就全部完成了,接下来就可以启动了.

redis-server /etc/redis/redis.conf   #启动redis

停止redis:

查找Redis的pid

使用: kill -9 [redis进程号] 

Redis重要文件

redis-server是Redis服务器程序,开启Redis就是使用的这个文件。

redis-cli是在我们学习阶段需要频繁⽤到的⼀个命令⾏客⼾端程序。

/etc/redis.conf是Redis服务器的配置⽂件。

/etc/redis-sentinel.conf是RedisSentinel的配置⽂件。

redis-shutdown是⽤于停⽌Redis的专⽤脚本。
 

Redis的使用

Redis也是一个客户端服务器的程序,他的交互方式和MySQL没有区别.

现在我们可以直接使用redis-cli命令来连接到redis.

上述就是我们进入redis之后的终端.

127.0.0.1是因为我们是本机登录,6379是redis的默认端口.

Redis通用命令

Redis有多种数据结构,但它们都是键值对种的值,对于键来说有⼀些通⽤的命令。接下来将介绍这些通用命令.

set   get

set keyname  value   给对应的key设置value

实例:

给world键设置值为123 

get keyname    返回对应的键的value

如果键不存在,则返回nil

 

set和get命令是redis中使用最频繁的两个命令.他们的使用也非常简单.

keys

用来查询服务器上匹配的key

keys命令是通过一些通配符来描述出key的大致摸样,匹配上的key就是被查找出来.

匹配一个字符 ?

匹配0个或者任意个字符  *

[a,b,c] 只能匹配到中括号中的字符,别的不行

[^ab] 配置中括号中的字符,别的都能匹配

 

[a-e] 配置a-e这个区间的字符,包括两边字符

 

 exists

判断某个key是否存在

可以看到,如果存在,则返回1,如果不存在,则返回0

 

可以看到,当有多个key的时候,返回的是key存在的个数 

del

删除指定的key

成功删除返回1, 删除失败返回0

当同时删除多个key的时候,返回的就是删除成功的个数. 

expire

为指定的key设置过期时间 以秒为单位

 这里的过期时间指的是,为这个key设置时间,当时间到了之后,那么Redis就会自动的删除这个key.

在上图中,我们使用expire去给一个key设置了过期时间,再使用ttl查看这个key还剩余多少时间. 

 

当时间到了之后,使用ttl命令就会发现返回一个-2,在去查找这个key,发现已经找不到了. 

以上命令是Redis的全局命令,适用于Redis的所有数据结构.

返回列表