-
Notifications
You must be signed in to change notification settings - Fork 0
Description
分布式缓存-Redis
redis的优势
存储结构
- 字符
- 散列
- 列表
- 集合
- 有序集合
丰富的功能
- 可以为key设置超时时间
- 使用列表类型存储来实现分布式队列
- 支持发布订阅消息模式
使用简单
- 提供了丰富的命令
应用场景
- 数据缓存(商品数据,新闻,热点数据)
- 单点登录
- 秒杀,抢购
- 网站访问排名
- 应用的模块开发
安装
- 下载安装包
- tar -zxvf 安装包
- make 编译
- make test测试编译状态
- make install完成安装
常用工具
Redis-server 启动服务
Redis-cli访问控制台
redis-benchmark性能测试工具
redis-check-aof 检测aof格式文件
redis-check-dump 检测rdb文件
redis-sentinel sentinel服务器配置
常用命令
- 启动./redis-server ../redis.conf
- 关闭./redis-cli shutdown
- 连接./redis-cli (默认连接本机redis)
- 后台模式daemonize=yes
多数据支持
默认支持16个数据库;可以理解为命名空间。通过 select dbid选择不同的数据库命名空间。dbid取值范围是0-15.
与关系型数据库区别
- redis不支持自定义数据库名字
- 每个数据库不能单独设置权限。
- 每个数据库之间不是完全隔离。可以通过flushall命令清空redis实例里面所有数据库的数据。
使用入门
-
获得一个符合规则的键名列表
key nick:hobby(类似正则表达式)
-
判断一个键是否存在, EXISTS key
-
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】 获得区间元素【分数】
事务处理
- MULTI 命令 开启事务
- 添加事务中的操作
- EXEC 命令 执行事务(出错后回滚)
过期时间
expire key seconds 设置key的过期时间
ttl key 获得key的过期时间
发布订阅
publish channel message
subscribe channel1 channe2
实现分布式锁
可以使用数据库,ActiveMQ,redis,zookeeper实现