目录
Redis简介
Redis环境搭建
基础通用命令
Redis简介
Redis是一个在内存中存储数据的中间件,可用于作为数据库,也可作为数据缓存。适用于分布式系统。
Redis的一些特性:
1、主要通过“键值对”的方式存储数据,是一种“非关系型”数据库。
2、可编程的:针对Redis的操作,可以直接通过简单的交互式命令进行操作。也可以通过一些脚本的方式,批量执行一些操作(可以带有一些逻辑)。
3、拓展性:可以在Redis原有的基础功能上再进行拓展。Redis提供了一组API,可以通过C,C++等语言编写Redis拓展。
4、持久化:Redis支持持久化,就是把数据存储在硬盘上。内存为主,硬盘为辅。(硬盘相当于对内存的数据备份了一下)如果Redis重启了,就会在重启时加载硬盘中的备份数据,使Redis的内存恢复到重启前的状态。
5、支持集群:一个Redis服务器能存储的数据是有限的。引入多个主机,部署多个Redis节点。每个Redis节点存储数据的一部分。
6、高可用:Redis自身也是支持“主从”结构的。从节点就相当于主节点的备份。
7、存取速度快:第一Redis数据在内存中,比访问硬盘的数据库快得多。第二Redis的核心功能是比较简单的逻辑。第三从网络角度,Redis使用了IO多路复用(使用一个线程,管理很多个socket)的方式。第四Redis使用的是单线程的模型。减少了不必要的线程之间的竞争开销。
Redis环境搭建
我们此处是在Linux系统(Ubuntu)中进行安装。Redis官方是不支持Windows版本的。
使用apt安装:
apt install redis -y
查看安装是否成功:
netstat -anp | grep redis
redis安装成功后,默认的ip是127.0.0.1,也就是说只能由当前主机上的客户端访问,跨主机就访问不了了。要使其他主机也能访问。
要修改 /etc/redis/redis.conf
• 修改 bind 127.0.0.1 为 bind 0.0.0.0
• 修改 protected-mode yes 为 protected-mode no
# By default, if no "bind" configuration directive is specified, Redis listens
# for connections from all the network interfaces available on the server.
# It is possible to listen to just one or multiple selected interfaces using
# the "bind" configuration directive, followed by one or more IP addresses.
#
# Examples:
#
# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1 ::1
#
# ~~~ WARNING ~~~ If the computer running Redis is directly exposed to the
# internet, binding to all the interfaces is dangerous and will expose the
# instance to everybody on the internet. So by default we uncomment the
# following bind directive, that will force Redis to listen only into
# the IPv4 loopback interface address (this means Redis will be able to
# accept connections only from clients running into the same computer it
# is running).
#
# IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES
# JUST COMMENT THE FOLLOWING LINE.
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# bind 127.0.0.1 # 注释掉这⾏
bind 0.0.0.0 # 添加这⾏
protected-mode no # 把 yes 改成 no
启动 Redis 服务
service redis-server start
停⽌ Redis 服务
service redis-server stop
重启 Redis 服务
service redis-server restart
使用redis自带的客户端来连接服务器
redis-cli -h 要连接的ip -p 要连接的端口号
验证连接是否成功
ping
基础通用命令
get : 根据key来取value,如果当前key不存在,会返回nil,表示空。
set:把key和value存储进去(key和value默认都是字符串类型)
Redis支持很多种数据结构,整体上来说,Redis是键值对结构。key固定就是字符串,value实际上会有多种类型。
keys :用来查询当前服务器上匹配的key,通过一些特殊符号(通配符)来描述key的模样,匹配上述模样的key就能被查询出来。
key pattern
pattern支持如下通配样式:
? 匹配任意一个字符
* 匹配0个或者多个任意字符
[] 给出固定的选项
^ 排除固定项
• h?llo 匹配 hello , hallo 和 hxllo
• h*llo 匹配 hllo 和 heeeello
• h[ae]llo 匹配 hello 和 hallo 但不匹配 hillo
• h[^e]llo 匹配 hallo , hbllo , ... 但不匹配 hello
• h[a-b]llo 匹配 hallo 和 hbllo
注:keys命令的时间复杂度是O(N),在生产环境上一般会禁止使用keys命令,避免执行时间过长,使redis服务器被阻塞了,无法给其他客户端提供服务。
exists :判定key是否存在,返回key存在的个数。时间复杂度O(1) /O(N)
exists key [key...]
del :删除指定的key,可以删除一个或多个。返回删掉的key的个数。时间复杂度O(1)/O(N)
expire:给指定的key设置过期时间,设置的时间单位是秒
pexpire:和expire一样,单位是毫秒
ttl:time to live 存活时间,可以查看当前key的过期时间还剩多少
type:可以查看key对应的value的类型
常见面试题:redis的key过期策略
redis的整体策略是:
1、定期删除:每次抽取一部分数据,进行验证过期时间,删除已经过期的,保证抽取检查的过程足够快。 定期删除的时间是有明确的要求的,因为redis是单线程的程序,如果扫描过期key的时间太多了,就可能导致正常处理请求命令就被阻塞了。
2、惰性删除 : 假设这个key已经到过期时间了,但是暂时还没删它,key还存在。紧接着,后面又一次访问,正好用到了这个key,于是这次访问就会让redis服务器触发删除key的操作,同时再返回一个nil
以上关于redis,希望对你有所帮助。