学习目标
1.能够独立安装redis
2.能够通过查询文档使用redis常见命令,比如set,get…
3.能够说出RDB和AOF的优缺点,从占用存储空间\存储速度\恢复速度\数据安全性\资源消耗\启动优先级。进行对比\
概念
概念:Redis (REmote DIctionary Server) 是用 C 语言开发的一个开源的高性能键值对(key-value)数据库。
特征:
- 数据间没有必然的关联关系
- 内部采用单线程机制进行工作
- 高性能。官方提供测试数据,50个并发执行100000 个请求,读的速度是110000 次/s,写的速度是81000次/s。
- 多数据类型支持
字符串类型 string
列表类型 list
散列类型 hash
集合类型 set
有序集合类型 zset/sorted_set - 支持持久化,可以进行数据灾难恢复
应用场景
为热点数据加速查询(主要场景),如热点商品、热点新闻、热点资讯、推广类等高访问量信息等
即时信息查询,如各位排行榜、各类网站访问统计、公交到站信息、在线人数信息(聊天室、网站)、设备信号等
时效性信息控制,如验证码控制、投票控制等
分布式数据共享,如分布式集群架构中的 session 分离
消息队列
安装
在linux上安装软件前先安装下面三大件,大部分软件都依赖下列三大件
Shell
yum install gcc-c++ yum install -y pcre pcre-devel yum install -y zlib zlib-devel
安装redis
Shell
# 下载安装包,如不能下载修改DNS:223.5.5.5 使用阿里的DNS服务器 wget http://download.redis.io/releases/redis-5.0.0.tar.gz # 解压 tar –xvf redis-5.0.0.tar.gz # 进入解压目录,然后编译 make # 安装 make install
启动和配置
启动服务端
格式 redis-server [–port 端口号]
Shell
./redis-server --port 6379
指定配置文件
Shell
./redis-server redis.conf # redis.conf和redis-server这里在同一个目录
启动客户端
格式redis-cli [-h host] [-p port]
Shell
redis-cli –h 61.129.65.248 –p 6384
服务端配置
Code
prot 6379 # 数据存放目录 dir /redis/data # 最大客户端连接数 # maxclents 6 # 客户端超时时间 # timeout 4000 # 日志级别 # loglevel debug|verbose|notice|warning # 日志名 logfile "log-6379.log"
入门操作
redis支持的数据类型
字符串类型 string
列表类型 list
散列类型 hash
集合类型 set
有序集合类型 zset/sorted_set
string
基本操作
Code
SET name value //存 GET name //取
添加/修改
Code
set key value
获取
Code
get key
删除
Code
del key
判断性添加
Code
setnx key value
添加修改多个数据
Code
mset key1 value1 key2 value2 …
添加获取多个数据
Code
mget key1 key2…
获取数据字符个数
Code
strlen key
追加信息到原始信息后部(如果原始信息存在就追加,否则新建
Code
append key value
扩展操作
设置数值数据增加指定范围的值
incr操作的数据不存在会从1开始,如果
Code
incr key incrby key increment incrbyfloat key increment
设置数值数据减少指定范围的值
Code
decr key decrby key increment
设置数据具有指定的生命周期
Code
setex key seconds value psetex key milliseconds value
扩展操作注意事项
- 数据操作不成功的反馈与数据正常操作之间的差异
表示运行结果是否成功
(integer) 0 → false 失败
(integer) 1 → true 成功
表示运行结果值
(integer) 3 → 3 3个
(integer) 1 → 1 1个
- 数据未获取到时,对应的数据为(nil),等同于null
- 数据最大存储量:512MB
- string在redis内部存储默认就是一个字符串,当遇到增减类操作incr,decr时会转成数值型进行计算
- 按数值进行操作的数据,如果原始数据不能转成数值,或超越了redis 数值上限范围,将报错
9223372036854775807(java中Long型数据最大值,Long.MAX_VALUE)
- redis所有的操作都是原子性的,采用单线程处理所有业务,命令是一个一个执行的,因此无需考虑并发带来的数据影响
key的命名规范
格式: 表名:主键名:主键值:字段名
比如 user:uid:1:name
在redis中为大V用户设定用户信息,以用户主键和属性值作为key,后台设定定时刷新策略即可
eg: | user🆔3506728370:fans | → | 12210947 |
eg: | user🆔3506728370:blogs | → | 6164 |
eg: | user🆔3506728370:focuses | → | 83 |
hash
基本操作
添加/修改
Code
hset key field value
获取
Code
hget key field hgetall key
删除
Code
hdel key field1 [field2]
设置filed,如果field已经存在则不做任何操作
Code
hsetnx key field value
添加修改多个数据
Code
hmset key field1 value1 field2 value2 …
获取多个数据
Code
hmget key field1 field2 …
获取哈希表中字段数量
Code
hlen key
获取哈希表中是否存在指定的字段
Code
hexists key field
扩展操作
获取哈希表中所有的字段名或字段值
Code
hkeys key hvals key
设置指定字段的数值数据增加指定范围的值
Code
hincrby key field increment hincrbyfloat key field increment
注意事项
- hash类型中value只能存储字符串,不允许存储其他数据类型,不存在嵌套现象。如果数据未获取到,对应的值为(nil)
- 每个 hash 可以存储 232 - 1 个键值对
- hash类型十分贴近对象的数据存储形式,并且可以灵活添加删除对象属性。但hash设计初衷不是为了存储大量对象而设计的,切记不可滥用,更不可以将hash作为对象列表使用
- hgetall 操作可以获取全部属性,如果内部field过多,遍历整体数据效率就很会低,有可能成为数据访问瓶颈