Redis:介绍和认识,通用命令,数据类型和内部编码,单线程模型
介绍和认识
Redis是一个基于内存的,高性能的,支持许多数据类型的NoSQL数据库,可以持久化,也支持分布式。
在许多的互联网产品中,对于数据库的访问速度要求很高,例如Mysql数据库无法满足其要求,这时候Redis可以作为数据库来进行访问,因为Redis是通过内存进行存储,比Mysql在硬盘中存储的访问速度快了很多。
Redis就是基于网络进行通信,可以把自己内存中的变量给别的线程,甚至别的主机进行使用(Redis是一个运行在某台主机上的服务进程,将数据保存在自己的内存中,然后通过网络提供服务,其他的线程,进程,主机都可以通过网络连接访问这些内存数据,像是调用远程变量一样)。
有些服务将Mysql和Redis结合起来一起使用(二八原则),百分之二十的热点数据,能满足百分之八十的需求。
Redis是内存中存储数据的中间键,通过内存进行存储,用于作为数据的缓存。
Redis是通过键值对来组织存储的非关系型数据库
Mysql是通过表的方法来组织存储的关系型数据库。
Redis的持久化,Redis是将数据存储到内存中的,为了防止关机,重启使数据丢失,Redis会将数据备份到硬盘中,内存为主,硬盘为辅
Redis快的原因:
- 通过内存进行存储,比访问硬盘的数据库快了很多。
- Redis的核心功能都是简单的逻辑关系
- 在网络的角度上,Redis使用的是IO多路复用的方式(epoll),使用一个线程,管理多个socket
- Redis使用的是单线程模式,避免了线程之间不必要的竞争开销
Redis的安装
我是在Ubuntu下进行的安装
使用apt进行安装
apt install redis -y
启动Redis
service redis-server start
记得修改.conf配置文件中的
将其修改为
注:之前的是只允许访问本机,不能跨机器进行访问
使用redis自带的客户端来连接服务器
redis-cli
Redis的通用命令
set
通过键值对的形式(key和value)进行存储
将a1的值设置为v1
set a1 v1
get
根据key来取value
get a1
如果得到一个不存在的key将会得到nil,表示为空
Redis的全局命令
全局命令就是能够搭配任意的数据结构来使用的命令
Redis支持很多种数据类型,简单的来说,Redis就是键值对的结构,key就是字符串,value对应的就是各种的数据类型(hash,String,set,list等)
keys
用来查找满足匹配类型的key(满足样式的key)
?匹配任意单个字符
* 匹配0个或者多个任意字符
[a c b] 匹配满足[]内的字符
[^a] 排除a字符,其他都满足
[a-c]a-c之间的字符满足
exists
判断某个key是否存在
redis自身的键值对,是通过哈希表进行组织的
del
删除指定的key
expire
为指定的key设置过期时间,单位是秒
key存活超过这个指定的存活时间,就会被自动的删除
ttl
查看指定key的存活时间
redis的key的过期策略是如何是实现的
- 1.定时删除,设置key的过期时间,到过期时间,自动删除key
- 2.惰性删除,通过命令访问key,Redis会检查可以是否过期,如果过期,会直接进行删除,并返回null
- 3.定期删除,Redis每隔一段时间会挑选一批设置了过期时间的key,检查是否过期,如果超过一定比例的key过期,则会加速删除的频率,直到比例下降
type
返回key的数据类型
数据类型和内部编码
查看内部编码
Redis的单线程模式
Redis只使用一个线程,处理所有的命令请求,不是说Redis服务器进程内部真的只有一个线程,其实也有多个线程,多个线程是在处理网络IO。
如果多个客户端同时对Redis发送了请求,Redis对多个请求采用串行执行,一个接着一个执行
注:Redis特别需要注意,如果一个操作占用太长的时间,就会堵塞其他的请求。
Redis是单线程模型,为什么访问那么快
1.Redis访问内存,数据库直接访问硬盘
2.Redis的核心功能,比Mysql的核心功能更加的简单,不像数据库中有各种约束,会使其做额外的工作
3.Redis是单线程模式,避免了多线程之间不必要的竞争开销
4.处理网络IO,使用expoll这样的IO多路复用机制,一个线程可以管理多个socket
希望能对大家有所帮助!!!!!!