noSQL:
主要解决高并发数据,可以提高访问性能,将低服务器负担;
Redis:
底层结构:采用键值对存储
工作机制:采用单线程
Redis的数据结构(实用度左至右)
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 |
清除所有数据(不建议使用) |
总结:
- 在hash数据结构中如果key中没有数据那么这个key也会被回收掉
- 且在Rdids中无法定义任何重名的key包括不同数据结构的数据