本文介绍: redis是一种NoSql,是一种非关系数据库,以K-V的方式存储数据,不依赖于业务逻辑,不支持ACID,不遵循SQL标准性能上远超关系数据库,适用于并发场景海量数据读写,对数据具有扩展性

Nosqlredis简介

redis是一种NoSql,是一种非关系数据库,以K-V的方式存储数据,不依赖于业务逻辑,不支持ACID,不遵循SQL标准性能上远超关系数据库,适用于高并发场景海量数据读写,对数据具有扩展性常见的NoSql数据库有:

redis常识

redis底层单线程+IO多路复用

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值为myredisgetrange k1 1 2 返回yr,是一个左右都闭合的区间,下标从0开始。
setrange k1 pos abcabc插入到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中startend下标对应的值内容(从左到右),如果是坐插,那么会获得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

list底层数据结构

redis底层实现quicklist,在元素较少时,会使用一块连续的内存,使用ziplist,它把所有元素紧挨着一起存储,数据量较多时才使用quicklist元素多的时候是将多个压缩链表用链表串起来,做到了快速插入删除和减少空间冗余

redis set类型

redis的set是自动去重的,并且是无序的,是一个无序string集合。底层是一个value为nullhash表,添加、删除、查找复杂度为O(1)。

set常用命令

sadd k1 v1 v2 v3往集合k1中插入v1,v2v3,如果是重复的value将被忽略
smembers k1 取出k1集合中所有元素
sismember k1 v1 判断v1是否在库k1集合中,在返回1,不在返回0
scard k1 查看k1集合元素个数
srem k1 v1 v2 … 删除集合中的元素v1,v2,返回删除的个数
spop k1 随机从集合k1中吐出一个值
srandmember k1 n 随机从集合k1中去除n个值,不会删除值
smove source dest value 把集合source中的value移动dest集合
sinter k1 k2 取两个集合的交集
sunion k1 k2 取两个集合的并集
sdiff k1 k2 取两个集合的差集,实际上也可以sdiff k1 k2 k3,但是按顺序来做diff的,返回的是在k1中,不在k2(及k3)中的元素,如果没有返回空

set底层数据结构

底层实现是用hash表做的字典

redis hash类型

redishash 是一个键值对集合。这个hash表是一个string类型的field和value映射表。适用于存储对象

hash常用命令

hset key field value 给集合key 中插入一个以field为key,value为值的对象
hget key field 从集合key中获取field对应的值
hmset key field1 v1 field2 v2 … 一次批量设置hash
hexists key field 查看key集合中,field是否存在
hkeys key 列出key集合所有的field
hvals key 列出key集合所有field对应的值
hincrby key field n 给集合key的filed所对应的值加上n
hsetnx key field value 给集合key添加一kv对,当且仅当不存在field

redis有序集合zset

zset也是一个没有重复元素的字符串集合,集合每个元素包含了一个分值,根据分值进行排序,元素的key不能重复,但分值是可以有相等的分值存在

zset常用命令

zadd k1 score1 value1 score2 value2 … 往集合中添加元素
zrange k1 start end 取出下标startend的元素,不包含score,如果想要连score一起取出来,在后面添加withscores
zrangebyscore k1 minmax [withscores] [limit offset count] 取出我们限定最小最大范围之间的元素
zrevrangescore k1 max min [withscores] [limit offset count] 按maxmin的顺序取出在其之间的元素
zincrby k1 50 member 给指定member成员的score加上50
zcount k1 200 300 统计k1集合中200 – 300的score之间多少个元素
zrem k1 value 删除k1集合中给定值的元素
zrank k1 value 查看指定value的排序位置,下标都是从0开始

zset底层实现

(1)使用hash关联了元素及其score,元素名称作为field,元素score作为值;
(2)使用跳表给元素value排序,根据score范围获取元素列表

原文地址:https://blog.csdn.net/qq_42936727/article/details/134762012

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_45488.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注