主要解决高并发数据,可以提高访问性能,将低服务器负担;
底层结构:采用键值对存储
工作机制:采用单线程
string | hash | list | set | zset |
---|---|---|---|---|
key-value | key-(field-value) | 双向链表 | 的key | |
查询快,储存量少 | 查询快,存储量多 | 增删快,查询慢 | 去重,可求交并差集 |
说明:
Redis诞生的原因是解决高并发访问数据;而高并发一般是访问量和修改了量短时间发送变化;其需要根据其业务需求而选择不同的数据结构
string数据类型:
底层:键值对(key value)
方法 | 示例 | 说明 |
---|---|---|
set | set key value | 储存数据 |
get | get key value | 读取数据 |
del | del key | 删除数据 |
setnx | setnx key value | 判断存储:如果key存在,无法存储并返回0 |
mset | mset key value… | 批量添加 |
mget | mget key… | 批量查看 |
incr | incr key | 数据加一 |
decr | decr key | 数据减一 :注意有负数的存在 |
说明:
key命名规范
json: | 表名:主键名:“json字符串” |
---|---|
字段: | 表名:主键名:主键值:字段名 |
hash数据类型:
底层:键-键值对(key-(field-value))
方法 | 示例 | 说明 |
---|---|---|
hset | hset key field value | 存储数据 |
hget | hget key field | 获取数据 |
hdel | hdel key | 删除数据 |
hlen | hlen key | 查看field数量 |
hexists | hexists key field | 判断是否key存在 |
hmset | hmset key field value… | 批量存储 |
hmget | hmget key field… | 批量查询 |
hgetall | hgetall key | 查询所有数据 (底层采用单线程所以如果数据过多对服务器负担加载,慎用) |
list数据类型:
底层:双向链表
特点:有序、有索引、两边都可以操作、查询慢、增删快
修饰 | 操作规则 | 说明 |
---|---|---|
l | 左操作 | 以L开头方法操作数据以左边为开始操作数据 |
r | 右操作 | 以R开头方法操作数据以右边为开始操作数据 |
方法
方法 | 示例 | 说明 |
---|---|---|
lpush | lpush key value1 value2… | 添加数据 |
lrange | lrange key start stop | 遍历数据:start stop(头索引,遍历到那个索引) |
lpop | lpop key | 删除数据 只能一个一个删,删除位置取决于l还是r |
lindex | lindex key index | 获取指定索引位置的数据 |
lrem | lren key count value | 删除指定的数据: count(删除多少个) 删除什么值 |
说明:我们常用list,因为list可以对数据进行分页操作
set数据类型
数据结构:
类似hash结构,保留key,摒弃了value
底层:还是hashmap
特点:
无序、不重复、查询慢、增删快
方法 | 示例 | 说明 |
---|---|---|
sadd | sadd key member1 member2… | 添加数据 |
smembers | smembers key | 读取数据 |
srem | srem key member1 member2… | 删除数据 |
scard | scard key | 获取数量 |
sismember | sismember key member | 判断是否包含指定的数据 |
sinter | sinter key1 key2… | 求交集(公共的数据) |
sunion | sunion key1 key2… | 求并集(全部数据) |
sdiff | sdiff key1 key2… | 求差集(不包含公共的其他数据) |
公共api
针对所有数据类型(都是针对key操作的)
基本方法
方法 | 示例 | 说明 |
---|---|---|
del | del key | 删除指定key |
exists | exists key | 判断key是否存在 |
type | type key | 获取key的数据类型 |
时效性方法
方法 | 示例 | 说明 |
---|---|---|
expire | expire key seconds | 为指定key设置有效时间 |
ttl | ttl key | 获取key存活时间:(-1永久存储,-2消亡或不存在) |
persist | persist key | 将key时效性转换成永久性 |
查询方法
方法 | 说明 |
---|---|
keys * | 查询所以的key |
keys #* | 查询所有以#开头的key |
keys *# | 查询所有以#结尾的key |
keys ??# | 查询以?占位符且以#结束的所有key(:模糊查询,但key的字符长度要一致),可以任意组合(如?#?#) |
keys #*$ | 查询以#开头以$结束的 |
说明:一般我们禁用查询方法;应为效率太低了;一般都会将数据记录在一个文档中(拿到数据文档先分析数据结构,存的数据是什么)
Redis数据库操作
底层:默认是16个数据库,且以0开始的(可修改)
方法 | 说明 |
---|---|
select index | 切换数据库 |
move key db | 移动数据 |
dbsize | 获取数据库中有多少key |
flushdb | 清除当前数据库数据 |
flushall | 清除所有数据(不建议使用) |