Nosql与redis简介
redis是一种NoSql,是一种非关系型数据库,以K-V的方式存储数据,不依赖于业务逻辑,不支持ACID,不遵循SQL标准,性能上远超关系型数据库,适用于高并发的场景及海量数据读写,对数据具有高扩展性。常见的NoSql数据库有:
redis常识
redis key操作
redis 数据类型
string 类型
二进制安全类型,可以包含任何数据,n,’’等,是redis中最基本的数据类型,redis中一个string类型value最大可以有512MB
string 类型支持的操作有下面这些内容:
set k1 zxcvbn 设置k1值zxcvbn,多次set同一个key会进行覆盖
get k1 获得k1的值
append k1 a 在库k1对应的值尾部添加a,成功后返回value总长度
strlen k1 获得k1对应值的长度
setnx k1 v1 当库k1不存在时设置值,存在时不覆盖返回0
incr k2 当值为数字类型时,可以给k2所对应的值进行+1
decr k2 当值为数字类型时,可以给k2所对应的值进行-1
incrby k2 10 给k2所对应的值加上自定义步长10
decrby k2 10 减10
incr的操作是原子的
mset k1 v1 k2 v2 …同时设置多个键值对
mget k1 k2 … 同时获得多个键值对
msetnx k1 v1 k2 v2 … 也是同时设置多个值,如果其中有一个以上key存在,会失败,所有key不存在时才会成功,是一个原子性的操作
getrange k1 start_pos end_pos 获取k1指定起始和终点位置的下标,如假如k1值为myredis,getrange k1 1 2 返回yr,是一个左右都闭合的区间,下标从0开始。
setrange k1 pos abc 将abc插入到k1对应的值中,从值的第pos个位置开始,如set k1 2 abc,会返回myrabcedis
setex key expire_time value 设置key的值为value并且过期时间为expiretime
getset key value 获取key的值并用新的value替换原值
redis string 底层数据结构
string类型是一种简单字符串,会进行动态扩容,会提前预分配空间以减少内存分配,字符串的实际分配空间一般都会高于实际字符串的长度,当字符串长度小于1M时,会加倍扩容,大于1M时,扩容只会多扩1M的内存。
redis list类型
redis list是单键多值的一种数据结构,一个key可以对应一整个列表的值,列表是双向列表,是插入有序的,可以选择头插或尾插(左右插值),双端操作性能较高,列表中部操作性能较差
list类型常用命令
lpush/rpush k1 v1 v2 v3 往k1中坐插/右插入一个或多个值
lrange k1 start end 获取k1中start 到end下标对应的值内容(从左到右),如果是坐插,那么会获得v3,v2,v1,rpush则会获得v1,v2,v3
lrange k1 start -1表示获取start之后所有的值
lpop/rpop k1 从左边或右边取出来一个值,如果值全取出来了,key也就不存在了
rpoplpush k1 k2 从k1的链表右边取一个值插入到k2的左边
index key index 根据索引下标取到对应元素
len key 获取列表长度
linsert k1 before/after value new_value 往k1所对应链表中value值前面/后面插入new_value值
lrem key n value 从左边开始删除n个value
lset key index value 将key链表下标index的值替换成value