解决问题
nosql特点
key_value存储形式:提高了数据库的扩展能力
特点
不遵循sql标准: 不支持acid:
原子
一致
隔离
持久
远超sql的性能
不适用场景
需要事务支持
基于sql结构化查询存储,处理复杂关系,需要实时查询
特点:
常用操作
keys* 查看当前库的所有key
匹配 key * 1
exists key
判断某个key是否存在
type key
查看key是什么类型
del key
删除指定的key
unlink key
根据value选择非阻塞删除
仅将keys从keyspace中元数据删除,真正的删除会在后续异步操作
expire key 10
为给定的key设置过期时间
ttl key
查看还有多少秒过期
-1 永不过期
-2 表示已过期
select
切换数据库
dbsize
查看当前库中有多少数量的key
flushdb
清空当前库
flushall
通杀所有库
string
一个key对应一个value
是二进制安全的, 可包含任何数据类型, 比如 jpg,或者序列号的对象
redis的基本数据类型,一个redis中字符串value最多可以是512M
大小限制,扩容
常用命令
set key value
设置值, 通个key会覆盖之前设置的
mset
设置多个值
get key
获取值的vakue
append <key>
添加key的值到末尾
strlen <key>
获取key的长度
setnx <key> <value>
key不存在时,设置key的值
incr <key>
加1
decr <key>
减1
incrby <key> 10
指定key加10
原子操作
不会被线程调度机制打断
decrby <key> 10
指定key减10
getrange name 0 3
获取值的范围
setrange name 0 3
用value覆写key所存储的值, 从起始位置开始,索引从0开始
setex age 20 value30
设置key的时候,设置过期时间
setex <key> <time><value>
getset <key> <value>
以旧换新,设置新值的时候获取旧值
incrby:
列表
lplush/rpush <key><value1><value2><value3>...
从左边/右边插入一个或者多个值
如:lpush k1 v1 v2 v3
rpush k3 v1 v2 v3
lpop/rpop <key>
从左边右边吐出一个值,值在键在
lrange <key> <start> <stop>
按照索引下标获取元素
lrange k1 0 -1
取所有的值
rpoplpush <key1> <key2>
从key1列表右边吐出一个值,加入到key2左边
index <key> <index>
按照索引下标取值,从左到右
llen <key>
获取列表长度
linsert k3 before 'v1' 'newv1'
在v1值的前面加个new1新值
linsert k3 after'v1' 'newv2'
在v1值的后面加个new2新值
lerm <key> <n> <value>
从左边开始删除n个value
lset <key> <index> <value>
按索引替换值
放值的方式不同
数据结构
set集合
sadd key1 s3 s2
添加多个值
smembers key1
取所有值
scard key1
返回集合元素个数
哈希 hash
有序集合zset