redis使用

86 阅读5分钟

功能特性

  • 安全性:
    • 密码保护:通过设置密码保护访问
    • ACL: 用户访问控制列表
  • 多种数据结构
  • 事务: 支持将多个命令打包执行,保持原子性
  • 持久化
  • 复制:支持主从复制,实现数据的冗余和读取扩展
  • 哨兵系统:用于监控主服务器的状态,自动进行故障转移
  • 集群:通过Redis Cluster实现数据分片和高可用性
  • Lua脚本:支持在Redis服务器上执行Lua脚本
  • 慢查询日志:记录执行时间超过指定阈值的查询

使用

启动服务器

redis-server

启动服务

redis-cli

主从部署

单机部署缺点

  • 如果单机部署发生故障,那么整个redis服务将不能使用。
  • 单机部署会成为性能屏障。
  • 所有数据存在单个节点上,如果出现故障,同时未持久化,这部分数据很容易丢失不易恢复。

主从部署解决了上述3个问题。主节点处理写请求,同步数据给从节点,从节点执行读请求。如果主节点发生故障未将从节点升级到主节点还是无法执行写请求。

负载均衡

读写分离,主节点写服务,从节点读服务。写少读多的场景下,提高并发量。

主节点

redis-server redis.conf

从节点

redis-server redis-slave.conf
redis-cli -p 6380

从节点使用6380端口,在redis-slave.conf在中设置端口6380, replicaof 127.0.0.1 6379

查看主从信息

info replication

在从节点不能写,只能在master写

127.0.0.1:6380> set key1 value1
(error) READONLY You can't write against a read only replica.
127.0.0.1:6380> 

缺点

  • 复制延时,信号衰减

    由于所有的写操作都是在master上操作,然后同步到slave上,所以master同步到slave机器上有一定的延迟,当系统繁忙的时候,延迟会更加严重,slave的数量也会导致这个问题

  • master挂了

    如果master挂了默认情况不会在slave中自动重选一个master,需要人工干预

哨兵部署

哨兵节点监控主从节点的状态,并在故障发生时自动完成故障发现和转移

集群部署

集群将数据分散到多个节点,突破了Redis单机内存大小限制,同时每个主节点都可以对外提供读写服务

Strings

场景

  • 缓存session、token、图片地址、序列化后的对象
    • SET
    • GET
     SET session1 session_value1
     GET session1
    
  • 计数的场景:用户单位时间的请求数、页面的访问数
    • SET
    • GET
    • INCR
    • DECR
    SET  num1 1
    INCR  num1
    GET num1
    DECR num1
    
  • 分布式锁
    • SETNX key value
       SETNX  lock1 1
      
      如果再次SET返回0,需要DEL之后才能SET成功

List

Redis列表是简单的字符串列表,按照插入顺序排序。可以添加一个元素在头部或尾部。

场景

  • 信息流:文章、动态
    • LPUSH、LRANGE
    LPUSH  message 1 2 3
    LRANGE  message 0 -1
    
    0是起始索引,-1是结束索引,表示最后一个元素结束
  • 实现栈
    • LPUSH、LPOP
  • 实现队列
    • RPUSH、LPOP

Hash

Redis的Hash是一个String类型的field-value的映射表,适合用于存储对象,也可以直接修改对象中的某些字段值

场景

  • 用户信息、商品信息、文章信息
    • HSET设置单个字段的值 HSET user:001 name azhong age 20
    • HMSET设置多个字段的值
    • HMGET获取多个字段的值HGET user:001 name
  • 购物车信息
    • HSET加入购物车
    • HINCR加数量
    • HLEN获取所有商品数量
    • HDEL删除商品
    • HGETALL获取所有商品

Set

无序集合,元素唯一

场景

  • 需要随机获取数据源中的元素的场景
    • 抽奖系统
    • SADD(加入抽奖系统) SMEMBERS(查看所有抽奖用户)SPOP(随机获取集合中的元素并移除,适合不允许重复中奖的场景)
  • 需要存放的数据不能重复的场景
    • 文章点赞、动态点赞
    • SADD(点赞)SREM(移除点赞)SISMEMBER(检查用户是否点赞过)SMEMBERS(获取点赞列表)SCARD(获取点赞用户数)

命令

SADD key value
SADD name name1
SADD name name2
SADD name name3
SMEMBERS name
SPOP name
SRANDMEMBER name
SREM name name1
SISMEMBER  name name3
SCARD name

Sorted Set

相对set增加一个double类型的分数,使元素能有序

场景

  • 直播间送礼排行榜、朋友圈微信步数排行……
    • ZINCR(+1)、ZREVRANGE(从大到小排序)、ZUNIONSTORE(多日搜索汇总)

命令

ZADD (key) (score) meber1 [score2 member2]:添加元素
ZCARD (key):获取元素
ZREM (key) (member):移除元素
ZSCORE (key) (member) :获取指定集合指定元素的score
ZRANGE (key) start stop:通过索引返回区间内的成员(低到高)
ZREVRANGE (key) start stop:(高到低)

Bitmap

Bitmap存储的是连续的二进制数字,通过Bitmap只需要一个bit来表示某个元素对应的值或状态

场景

  • 用户签到情况、活跃用户情况、用户行为统计

命令

SETBIT (key) (index) (0/1)
GETBIT (key) (index)
BITCOUNT (key) (0/1)
BITPOS (key) (0/1):第一次出现这个下标的位置

HyperLogLog超日志

不是redis特有,是基数计数概率算法

命令

PFADD (key) (value)
PFCOUNT (key)
PFMERGE (key) (key1) (key2)

GEO

存储地理位置信息,基于Sorted Set实现

命令

GEOADD city 113.00000 28.21667 changsha
GEOPOS city changsha
GERODIST city changsha beijing:直线距离返回米,可以指定单位如km
GEORADIUS city 112 28 500 KM:返回方圆500km的元素

Pub/Sub发布/订阅

命令

  • SUBSCRIBE (key)
  • PUBLISH (key)