Skip to content

分布式缓存Redis(一) #23

@superstonne

Description

@superstonne

分布式缓存-Redis

redis的优势

存储结构

  1. 字符
  2. 散列
  3. 列表
  4. 集合
  5. 有序集合

丰富的功能

  1. 可以为key设置超时时间
  2. 使用列表类型存储来实现分布式队列
  3. 支持发布订阅消息模式

使用简单

  1. 提供了丰富的命令

应用场景

  1. 数据缓存(商品数据,新闻,热点数据)
  2. 单点登录
  3. 秒杀,抢购
  4. 网站访问排名
  5. 应用的模块开发

安装

  1. 下载安装包
  2. tar -zxvf 安装包
  3. make 编译
  4. make test测试编译状态
  5. make install完成安装

常用工具

Redis-server 启动服务

Redis-cli访问控制台

redis-benchmark性能测试工具

redis-check-aof 检测aof格式文件

redis-check-dump 检测rdb文件

redis-sentinel sentinel服务器配置

常用命令

  1. 启动./redis-server ../redis.conf
  2. 关闭./redis-cli shutdown
  3. 连接./redis-cli (默认连接本机redis)
  4. 后台模式daemonize=yes

多数据支持

默认支持16个数据库;可以理解为命名空间。通过 select dbid选择不同的数据库命名空间。dbid取值范围是0-15.

与关系型数据库区别

  1. redis不支持自定义数据库名字
  2. 每个数据库不能单独设置权限。
  3. 每个数据库之间不是完全隔离。可以通过flushall命令清空redis实例里面所有数据库的数据。

使用入门

  1. 获得一个符合规则的键名列表

    key nick:hobby(类似正则表达式)

  2. 判断一个键是否存在, EXISTS key

  3. type key获得key的数据结构类型

数据结构的使用

字符

字符类型的key默认存储最大容量是512M

赋值 SET key value

取值 GET key

递增数据

使用incr key 可以实现原子递增value,而不是使用api先获得value,递增后在存入redis。

key的设计

对象类型:对象 id:对象属性:对象子属性

建议对key进行同步到wiki上面统一管理

短信重发机制(使用expire实现)

incrby key integer 递增指定整数

decr key 原子递减

append key value 向指定的key追加字符串

strlen key 获得key的对应的value的长度

mget key key.. 同时获得多个key的value

mset key value key value ... 同时设置多个value

列表

list,可以存储一个有序的字符串列表

lpush/rpush key value value ...往左/右边添加数据

lpop/rpop key value value ... 从左/右边弹出数据(**使用push和pop可以实现分布式消息队列 **)

llen key 获得链表的长度

lrange key startindex stopindex 获得列表的片段,索引可以是负数,-1代表最右边的第一个元素

lrem key count value 统计一个值

lset key index value 重新设置一个值

exitsts key 判断key是否存在

setnx 存在则直接返回

散列

hash key value 不支持数据类型的嵌套

适合存储对象

hset/hget key field value 设置获取对象属性值

hmset/hmget key field value field value 批量设置获取

hgetall key 获得key的所有信息,包括key和value

hexists key field 判断对象的字段是否存在

hincryby 递增

hsetnx

hdel key field 删除一个或者多个字段

集合

set 和 list不同,集合中不能存在重复数据,且无顺序。

sadd/srem key member 增加/删除数据(如果已经存在,则返回成功,忽略存在的值,返回成功加入的数量)

smembers key 获得所有数据

sdiff key key 对多个集合执行差集运算

sunion key key 对多个集合执行并集操作

有序集合

zadd key score member score member 添加数据

zrange key start end 【withscores】 获得区间元素【分数】

事务处理

  1. MULTI 命令 开启事务
  2. 添加事务中的操作
  3. EXEC 命令 执行事务(出错后回滚)

过期时间

expire key seconds 设置key的过期时间

ttl key 获得key的过期时间

发布订阅

publish channel message

subscribe channel1 channe2

实现分布式锁

可以使用数据库,ActiveMQ,redis,zookeeper实现

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions