Redis
安装Redis
下载解压后
|
安装gcc
|
进入redis解压目录
使用make命令
|
Redis配置
复制解压后的安装程序文件夹里的redis.conf
到redis安装文件夹
修改监听端口
|
修改库的个数
|
修改端口号port
|
设置密码
|
Redis指令
Redis 命令用于在 redis 服务上执行操作。
要在 redis 服务上执行命令需要一个 redis 客户端。Redis 客户端在我们之前下载的的 redis 的安装包中。语法
Redis 客户端的基本语法为:
|
实例
以下实例讲解了如何启动 redis 客户端:
启动 redis 服务器,打开终端并输入命令 redis-cli,该命令会连接本地的 redis 服务。
|
在以上实例中我们连接到本地的 redis 服务并执行 PING 命令,该命令用于检测 redis 服务是否启动。在远程服务上执行命令
如果需要在远程 redis 服务上执行命令,同样我们使用的也是 redis-cli 命令。
语法
|
实例
以下实例演示了如何连接到主机为 127.0.0.1,端口为 6379 ,密码为 mypass 的 redis 服务上。
|
key操作指令
set: 设置key-value
get: 获取指定的key对应的value
keys *: 查看所有的key
del: 删除一个key或多个key。自动忽略掉不存在的key
exists: 判断一个key是否存在,如果存在返回1,不存在返回0
expire: 为某一个key设置过期时间单位秒seconds
move: 将当前数据库中的key移动到其他库
pexpire: 为某一个key设置过期时间单位毫秒milliseconds
(expireat)pexpireat: 以毫秒为单位设置过期时间戳
ttl: 查看对应key的过期时间。单位是秒。
pttl: 查看对应key的过期时间。单位是毫秒。
randomkey: 随机返回一个key
rename: 重命名
type: 查看key对应的数据类型
Redis数据类型
string类型
- mset: 一次设置多个key-value
- mget: 一次获取多个key-value
- getset: 获得原始的key的值,同时设置新值,如果不存在key则新建一个key
- strlen: 获得对应的key的存储的value的长度
- append: 为对应的key的value追加内容
- getrange: 字符串截取
List类型
相当于Java中的List集合
特点:有序(添加的先后顺序),可以重复
- lpush: 将某个值加入到一个list列表,将这个元素添加到列表的头部
- lrange:获取某一个下标区间内的元素
- rpush:将某个值加入到一个list列表,将这个元素添加到列表的尾部
- lpushx:和lpush基本相同,必须要保证这个key是否存在
- rpushx:和rpush基本相同,必须要保证这个key是否存在
- lpop:返回和移除列表左边的第一个元素
- rpop:返回和移除列表右边的第一个元素
- llen:获取列表元素的个数
- lset:设置某一个指定索引的值(索引有效),修改操作
- lindex:获取某一个指定索引位置的元素
- lrem:删除重复元素(少用)
- ltrim:保留列表中特定区间内的元素。列表的截取
- linsert:在某一个元素之前或者之后插入元素
Set类型
相当于Java中的set集合
特点:无序,不可以重复,若重复,则会覆盖
- sadd:为集合添加元素
- smembers:显示集合中的所有元素。无序(添加的先后顺序)
- scard:返回集合中的元素的个数
- spop:随机返回一个元素并将元素在集合中删除
- smove:从一个集合中向另一个集合中移动元素(前提:必须是同一种类型)
- srem:从集合中删除一个元素
- sismember:判断一个集合中是否有这个元素
- srandmember:随机返回一个元素
- sdiff:去掉第一个集合中和第二个集合中相同的元素
- sinter:求交集
- sunion:求并集
Zset类型
相当于Java中的TreeSet集合
特点:不可以重复,但有序
- zadd:添加一个有序集合,添加元素时需要指定每一个元素的分数
- zcard:返回集合中元素的个数
- zrange:升序排列集合返回一个范围内的元素
- zrevrange:降序排列
- zrangebyscore:安装分数查找一个范围内的元素(类似于分页)
- zrank:返回排名(升序)
- zrevrank:返回排名(降序)
- zscore:查看一个元素的分数
- zrem:移除某一个元素
- zincrby:给某一个元素加分
Hash类型
相当于Java中的Map集合
特点:key不可重复,value可重复。无序
- hset:设置一个key/value对
- hget:获取一个key对应的value
- hgetall:获得所有的key/value对
- hdel: 删除某一个key/value对
- hexists:判断一个key是否存在
- hkeys:获得所有的key
- hvals:获得所有的value
- hmset:设置多个key/value
- hmget:获取多个key/value
- hsetnx:设置一个不存在的key的值
- hincrby:为value进行加法计算
- hincrbyfloat:为value进行加分计算,小数
Redis主从架构
在redis主从架构中,Master节点负责处理写请求,Slave节点只处理读请求。对于写请求少,读请求多的场景,例如电商详情页,通过这种读写分离的操作可以大幅提高并发量,通过增加redis从节点的数量可以使得redis的QPS达到10W+。
在根目录下创建三个文件夹 master slave1 slave2
|
将redis压缩包解压后文件夹内的redis.conf分别复制到这三个文件夹中
修改 master redis.conf内容
|
修改 slave1和slave2 redis.conf内容
|
此时redis主从机构配置好了,主机负责读和写,主要负责写,而从机负责读,但不能写。
此时问题来了,如果主机挂了,那么数据就没法写到redis缓存中,从机只负责读,不能写,但此时仍可读数据
此时就需要用到Redis哨兵机制
Redis哨兵机制
哨兵机制就是起一台机器用作哨兵,这个哨兵负责监听主机,如果主机挂了,那么它会让从机接替主机位,以此类推,需要用到选举
在根目录下新建sentinel文件夹
|
将sentinel.conf 复制到redis安装目录 bin下
|
启动哨兵
|
Redis缓存穿透
缓存穿透指的查询缓存和数据库中都不存在的数据,这样每次请求直接打到数据库,就好像缓存不存在一样。