redis随计——数据类型

本文详细介绍了Redis中的数据结构,包括String、List、Set和Zset等,讲解了它们的操作方法,如设置、获取、删除、更新及过期时间设置等。还提到了Redis的数据库管理、缓存策略以及单线程与多路IO复用机制,是理解Redis存储和性能优化的重要参考资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍

①减少CPU和IO压力,共享session,做缓存数据库(水平、垂直切分,读写分离都要破坏一定业务逻辑来换取性能)
②string list set zset hash
③redis默认16个数据库,0-15,select 8切换,dbsize查看当前数据库key数量,flushdb清空当前库,flushall清空全部
④单线程+多路IO复用

常用数据类型

①key键
keys *:查看所有key(匹配:keys*1)
exists key:判断key是否存在
type key:查看key类型
del key
unlink key:非阻塞删除,仅将keys从kegspace元数据中删除,真正删除会在后续异步操作
expire key 10:10秒钟,key设置过期时间
ttl key:查看还有多少秒过期,-1永不过期,-2已过期

②string:一个字符串类型的值最多可以是512M
set key value:添加数据,*NX:key不存在,可以添加;*XX:key存在也可以添加;*EX:key的超时秒数;*PX:超时毫秒数
get key:查询对应键值
append key value:将给定的value追加到原值的末尾
strlen key:获得值的长度
setnx key value:只有key不存在时,设置key的值
incr/decr:将key中的值加/减1,只能对数字操作,如果为空,新值为1/-1;原子性:不会被线程调度机制打断
incrby/decrby key 步长:自定义加几
mset k v kl vl:批量设置,mget,msetnx(有一个失败全失败)
getrange key 起始 结束:截取值,前后都包
setrange key 起始 value:覆盖从起始开始的值
setex key 过期时间s value:设值时同时设过期时间
getset key val :设新值时返回旧值

③List:简单的字符串列表,按照插入顺序排序,底层是双向链表,数据结构为快速链表quickList;在列表元素较少的时候会使用一块连续的内存存储,这个结构是压缩列表ziplist,当数据量较多时把多个ziplist双向键接成quickIist
lpush/rpush k v1 v2:从左/右边插入值(从左边放时,顺序为v2,v1)
lpop/rpop key:从左/右边吐出值,值光键亡
rpoplpush k1 k2:从k1右边吐出一个值插到k2的左边
lrange key start stop;按照索引获得元素
lrange mylist 0 -1 0左边第一个,-1右边第一个,(0-1表示获取所有)
lindex 按照索引下标获得元素(从左到右)
llen 获得列表长度
linsert before 在的后面插入插入值
lrem 从左边删除n个value(从左到右)
lset将列表key下标为index的值替换成value

④set:类似Iist,但是无序且不能有重复数据,还能判断是否有某个值;底层是Value为null的hash表,所以操作复杂度是O(1);
sadd …
将一个或多个 member 元素加入到集合 key 中,已经存在的 member 元素将被忽略
smembers 取出该集合的所有值。
sismember 判断集合是否为含有该值,有1,没有0
scard返回该集合的元素个数。
srem … 删除集合中的某个元素。
spop 随机从该集合中吐出一个值。
srandmember 随机从该集合中取出n个值。不会从集合中删除 。
smove value把集合中一个值从一个集合移动到另一个集合
sinter 返回两个集合的交集元素。
sunion 返回两个集合的并集元素。
sdiff 返回两个集合的差集元素(key1中的,不包含key2中的)

⑤hash:键值对集合,是一个string类型的field和value的映射表,类似于map<string,Object>;对应数据结构,field-value长度较短且个数少时,用ziplist,否则用hashtable。
hset 给集合中的 键赋值
hget 从集合取出 value
hmset … 批量设置hash的值
hexists查看哈希表 key 中,给定域 field 是否存在。
hkeys 列出该hash集合的所有field
hvals 列出该hash集合的所有value
hincrby 为哈希表 key 中的域 field 的值加上增量 1 -1
hsetnx 将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在

⑥Zset:有序:类似于map<string,Double>,可以给每个元素value赋予一个权重score,也类似于TreeSet,内部会按照score排序;底层使用了两个数据结构:Hash(关联value和score,并且保障value的唯一性,可以通过value找到score)、跳跃表(给value排序,根据score范围获取元素列表)
zadd …
将一个或多个 member 元素及其 score 值加入到有序集 key 当中。
zrange [WITHSCORES]
返回有序集 key 中,下标在之间的元素
带WITHSCORES,可以让分数一起和值返回到结果集。
zrangebyscore key minmax [withscores] [limit offset count]
返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按 score 值递增(从小到大)次序排列。
zrevrangebyscore key maxmin [withscores] [limit offset count]
同上,改为从大到小排列。
zincrby 为元素的score加上增量
zrem 删除该集合下,指定值的元素
zcount 统计该集合,分数区间内的元素个数
zrank 返回该值在集合中的排名,从0开始

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值