1.基本了解
概念
Redis
(REmote DIctionary Server) 是用 C
语言开发的一个开源的高性能键值对(key-value
)数据库
特征
- 数据间没有必然的关联关系
- 内部采用单线程机制进行工作
- 高性能: 官方提供测试数据,50个并发执行100000 个请求,读的速度是110000 次/s,写的速度是81000次/s
- 多数据类型支持:
String
、List
、Hash
、Set
、zSet(不常用)
- 支持持久性,避免数据丢失,可以进行数据灾害恢复
应用场景
- 为热点数据加速查询(主要场景):如热点商品、热点新闻、热点资讯、推广类等高访问信息等
- 即时信息查询:如排行榜、网站访问统计、公交到站信息、在线人数信息(网站、聊天室)、设备信号等
- 即效性信息控制:如验证码、股票等
- 分布式数据共享:分布式集群架构中的
session
分离消息队列
2.基本操作
功能性命令
//设置key、value数据
set(key, value)
//根据key查询对应的value,如不存在及返回空(nil)
get(key)
帮助信息&退出指令&清屏指令
//获取帮助文档
help [command]
//获取组中所有命令信息名称 (可在使用tab键自动补充)
help [@group-name]
//退出指令
quite
exit
clt+c (推荐)
//清屏指令
clear
3.数据类型
3.1 Redis 数据存储格式
Redis
自身是一个Map
,其中所有的数据都采用key:value
的形式存储
对于这种数据结构来说,我们用来存储数据一定是一个值前面对应一个名称。我们通过这名称来访问后面的值。按照这种趋势,我们可以对出来我们的储存格式。前面这一部分称为key
,后面的一部分称为value
,而我们的数据类型,也就一定是修饰value
,key
则永远为字符串
3.2 String数据类型
基本操作 | 说明 |
---|---|
set key value | 添加/修改数据 |
get key | 获取数据 |
del key | 删除数据 |
setnx key value | 判断性添加数据 |
mset key1 value1 key2 value2 ... | 批量添加/修改数据 |
mget key1 key2 ... | 批量获取数据 |
strlen key | 获取字符串的长度 |
append key value | 追加数据到原数据后部 |
incr key | 设置数值自增1 |
incrby key increment | 设置数值自增increment值 |
incrbyfloat key increment | 设置浮点数自增increment值 |
decr key | 设置数值自减1 |
decrby key increment | 设置数值自减increment值 |
setex key seconds value | 设置数据指定生命周期(单位:秒) |
psetex key milliseconds value | 设置数据指定生命周期(单位:毫秒) |
String数据类型注意事项
3.3 Hash数据类型
hash
,左边一个为key
,右边一个存储空间。这里要明确一点,右边这块儿存储空间叫hash
,也就是说hash
是指一个数据类型,它指的不是一个数据,是这里变的一堆数据,那么底层就是用hash
表的结构来实现
值得注意:
- 如果
field
数量较少,储存结构优化为类数组结构 - 如果
field
数量较多,存储结构使用hashmap
结构
基本操作 | 说明 |
---|---|
hset key field value | 添加/修改数据 |
hget key field | 获取数据 |
hgetall key | 获取此key的全部数据 |
hdel key field1 [field2] | 删除数据 |
hsetnx key field value | 设置field的值,如field存在及不做操作 |
hmset key1 field1 value1 field2 value2 ... | 批量添加/修改数据 |
hmget key1 field1 field2 ... | 批量获取数据 |
hlen key field | 获取哈希表中字段数量 |
hexists key field | 获取哈希表中是否存在指定的字段 |
hkeys key | 获取哈希表中所有字段名 |
hvals key | 获取哈希表中所有字段值 |
hincrby key field increment | 设置指定字段的数值数据增加increment值 (整数) |
hincrbyfloat key field increment | 设置指定字段的数值数据增加increment值 (浮点数) |
数据操作注意事项:
- hash类型中value只能存储字符串,不允许储存其它数据结构,不存在嵌套现象。如何数据未获取,会返回空(nil)
- 每个hash可以存储232-1个键值对hash类型十分贴近对象的数据存储形式,并且可以灵活添加删除对象属性。但hash设计初衷不是为了存储大量对象而设计的,切记不可滥用,更不可以将hash作为对象列表使用
- hgetall操作可以获取全部属性,如果内部field过多,遍历整体数据效率就很会低,有可能成为数据访问瓶颈
3.4 List数据类型
-
如何所示,它是双向的,所以它左边右边都能操作,它对应的操作结构两边都进数据。这就是链表的一个存储结构。则往外拿数据是从两边进行操作。如果两端都能拿数据,这就是双端队列,两边都能操作。如果只能从一端进一端出,这个模型就是栈
基本操作 | 说明 |
---|---|
lpush key value1 [value2] ... | 从左向右添加/修改数据 |
rpush key value1 [value2] ... | 从右向左添加/修改数据 |
lpop key | 从左获取并移除数据 |
rpop key | 从右获取并移除数据 |
lrang key start end | 获取数据(start:开始下标,end:结束下标) |
lindex key index | 获取指定下标的数据 |
llen key | 获取数据 |
lrem key count value | 移除指定数量的value |
blpop key1 [key2] timeout | 规定时间内从左边获取并移除数据(非阻塞 | 秒) |
brpop key1 [key2] timeout | 规定时间内从右边获取并移除数据(非阻塞 | 秒) |
数据操作注意事项
-
List
中保存的数据都是String
类型,数据总容量是有限的,最多429496795元素 -
List
具有索引的概念,但是操作数据时通常以队列的形式进行入队出队操作,或以栈形式进行入栈出栈操作 - 获取全部数据操作结束索引设置为-1
4.List
可以对数据进行分页操作,通常第一页的信息来自于List
,第二页及更多的信息通过数据库的形式加载
3.5.Set数据类型
如图所示,于Hash存储结构完全相同,仅存储键,不存储值(nil),并且值是不允许重复的
基本操作 | 说明 |
---|---|
sadd key value1 value2 ... | 添加数据 |
smembers key | 获取全部数据 |
srem key value1 value2 ... | 删除数据 |
scrad key | 获取集合数据总量 |
sismember key value | 判断集合中是否包含指定数据 |
srandmember key [conut] | 随机获取指定count数的集合数据 |
spop key [count] | 随机获取集中的某个数据并将该数据移除集合 |
sinter key1 key2 | 获取两个集合的交集 |
sunion key1 key2 | 获取两个集合的并集 |
sdiff key1 key2 | 获取两个集合的差集 |
sinterstore destination key1 key2 | 获取两个集合的交集存储到指定集合中 |
sunionstore destination key1 key2 | 获取两个集合的并集存储到指定集合中 |
sdiffstore destination key1 key2 | 获取两个集合的差集存储到指定集合中 |
smove source destination value | 获取集合数据移动到指定集合中 |
数据操作注意事项
-
Set
类型不允许数据重复,如果添加的数据set
中已存在,将只留一份 -
Set
虽然与hash
的存储结构相同,但无法启用hash
中存储值得空间
4.常用指令
4.1 key常用指令
基本操作 | 说明 |
---|---|
del key | 删除数据 |
exists key | 判断key是否存在 |
type key | key的类型 |
rename key newkey | 改名 |
sort | 排序 |
expire key seconds | 设置key的有效时间(单位:秒) |
pexpire key milliseconds | 设置key的有效时间(单位:毫秒) |
ttl key | 获取key的有效时间(单位:秒) |
pttl key | 获取key的有效时间(单位:毫秒) |
persist key | 切换key从有效性转化到永久性 |
keys pattern | 查询key |
4.2 DB常用指令
基本操作 | 说明 |
---|---|
select index | 切换数据库 |
ping | 判断是否连接成功 |
move key db | 数据移动 |
dbsize | 数据总量 |
flushdb | 清空当下数据库数据 |
flushall | 清空所有数据库数据 |
网友评论