Redis篇一之基础数据结构
Redis诞生于2009年全称是Remote Dictionary Server,远程词典服务器,是一个基于内存的键值型NoSQL数据库。具有基于键值型、单线程、低延迟、支持数据持久化、支持主从集群、分片集群和多语言客户端等特征。
Redis的数据结构
Redis的key一般是String类型,不过value的类型具有多样化,基础类型有String、Hash、List、Set、SortedSet, 特殊类型有GEO、BitMap和HyperLog
String类型****
常见命令:
| 命令 | 作用 |
|---|---|
| SET | 添加或者修改已经存在的一个String类型的键值对 |
| GET | 根据key获取String类型的value |
| MSET | 批量添加多个String类型的键值对 |
| MGET | 根据多个key获取多个String类型的value |
| INCR | 让一个整型的key自增1 |
| INCRBY | 让一个整型的key自增并指定步长 |
| INCRBYFLOAT | 让一个浮点类型的数字自增并指定步长 |
| SETNX | 添加一个String类型的键值对,前提是这个key不存在,否则不执行 |
| SETEX | 添加一个String类型的键值对,并且指定有效期 |
Hash类型
Hash类型类似Java的HashMap结构,可以将对象的每个字段独立存储,可以对某个字段进行单独操作。
常见命令:
| 命令 | 作用 |
|---|---|
| HSET key field value | 添加或者修改hash类型key的field的值 |
| HGET key field | 获取一个hash类型key的field的值 |
| HMSET | 批量获取多个hash类型key的field的值 |
| HMGET | 批量获取多个hash类型key的field的值 |
| HGETALL | 获取一个hash类型的key中的所有field和value |
| HKEYS | 获取一个hash类型的key中的所有的field |
| HVALS | 获取一个hash类型的key中的所有的value |
| HINCRBY | 让一个hash类型key的字段值自增并指定步长 |
| HSETNX | 添加一个hash类型的key的field值,前提是这个field不存在,否则不执行 |
List类型
List类型类似java的LinkedList,可以看成一个双向链表结构,既支持正向检索也支持反向检索。
常见命令
| 命令 | 作用 |
|---|---|
| LPUSH key element | 向列表左侧插入一个或多个元素 |
| LPOP key | 移除并返回列表左侧的第一个元素,没有则返回nil |
| RPUSH key element | 向列表右侧插入一个或多个元素 |
| RPOP key | 移除并返回列表右侧的第一个元素 |
| LRANGE key start end | 返回一段角标范围内的所有元素 |
| BLPOP 和BRPOP: | 在没有元素时等待指定时间,而不是直接返回nil |
List可以用来模拟栈,只要入口和出口在同一边即可以。还可以用来模拟队列和阻塞队列。
Set类型
类似Java中的HashSet类似,具有无序、元素不可重复、查找快、支持交集、并集、差集等功能。
| 命令 | 作用 |
|---|---|
| SADD key member | 向set中添加一个或多个元素 |
| SREM key member | 移除set中的指定元素 |
| SCARD key | 返回set中元素的个数 |
| SISMEMBER key member | 判断一个元素是否存在于set中 |
| SMEMBERS | 获取set中的所有元素 |
| sinter KEY1 KEY2 | 求key1与key2的交集 |
| SDIFF key1 key2 | 求key1与key2的差集 |
| SUNION key1 key2 | 求key1和key2的并集 |
SortedSet类型
是一个可排序的List集合,与Java的TreeSet类型类似,底层每一个元素都带有一个score属性,可以基于score属性对元素进行排序,底层的实现是一个跳表(SkipList)加hash表,具有可排序、元素不重复、查询速度快。
常见的命令有:
| 命令 | 作用 |
|---|---|
| ZADD key score member | 添加一个或多个元素到sorted set ,如果已经存在则更新其score值 |
| ZREM key member | 删除sorted set中的一个指定元素 |
| ZSCORE key member | 获取sorted set中的指定元素的score值 |
| ZRANK key member | 获取sorted set 中的指定元素的排名 |
| ZCOUNT key min max | 统计score值在给定范围内的所有元素的个数 |
| ZINCRBY key increment member | 让sorted set中的指定元素自增,步长为指定的increment值 |
| ZRANGE key min max | 按照score排序后,获取指定排名范围内的元素 |
| ZRANGEBYSCORE key min max | 按照score排序后,获取指定score范围内的元素 |
| lZDIFF、ZINTER、ZUNION | 求差集、交集、并集 |
注意:所有的排名默认都是升序,如果要降序则在命令的Z后面添加REV即可
BitMap类型
Redis使用String类型来实现BitMap,最大上限是512M
常见命令有:
| 命令 | 作用 |
|---|---|
| SETBIT | 向指定位置存入一个0或1 |
| GETBIT | 向指定位置(offset)的bit值 |
| BITCOUNT | 统计BItMap为1的bit位的数量 |
| BITFIELD | 操作(查询、修改、自增)BitMap中bit数组的指定位置(offset)的值 |
| BITFIELD_RO | 获取BitMap中bit数组,并以十进制形式返回 |
| BITOP | 将多个BitMap的结果做位运算(与、或、异或) |
| BITPOS | 查找bit数组中指定范围内第一个0或1出现的位置 |
很适合用到签到功能的实现
HyperLogLog
Hyperloglog(HLL)是从Loglog算法派生的概率算法,用于确定非常大的集合的基数,而不需要存储其所有值。
Redis中的HLL是基于string结构实现的,单个HLL的内存永远小于16kb,内存占用低的令人发指!作为代价,其测量结果是概率性的,有小于0.81%的误差。不过对于UV统计来说,这完全可以忽略。
一般用来统计UV和PV,常见的命令有
PFADD key element:将指定元素添加到指定key的HLL中
PFCOUNT key: 统计这个key中的HLL数量
PFMERGE destkey sourcekey : 将多个sourcekey的元素都合并到destkey中。
总结
上面主要是列举了Redis的常见数据结构,除上述外还有一些高级用法,比如Stream流,PubSub的发布订阅消息队列和事务等,可以到Redis官网查看。
Redis篇一之基础数据结构的更多相关文章
- Redis(一)基础数据结构
1.目录 Redis 基础数据结构 string (字符串) list (列表) hash (字典) set (集合) zset (集合) 容器型数据结构的通用规则 过期时间 2.Redis 基础数据 ...
- pandas 学习 第1篇:pandas基础 - 数据结构和数据类型
pandas是基于NumPy构建的模块,含有使数据分析更快更简单的操作工具和数据结构,是数据分析必不可少的五个包之一.pandas包含序列Series和数据框DataFrame两种最主要数据结构,索引 ...
- redis教程-基础数据结构
需要整套redis缓存高可用集群教学视频的加qq:1324981084,本套视频从安装到集群的搭建和源码的解析,从零基础讲解. 一.Redis 有 5 种基础数据结构,分别为:string (字符串) ...
- Redis 基础数据结构之二 list(列表)
Redis 有 5 种基础数据结构,分别为:string (字符串).list (列表).set (集合).hash (哈希) 和 zset (有序集合). 今天来说一下list(列表)这种数据结构, ...
- Redis 基础数据结构之一:string(字符串)
Redis 有 5 种基础数据结构,分别为:string (字符串).list (列表).set (集合).hash (哈希) 和 zset (有序集合),Redis存储数据的结构是键值对形式的. 首 ...
- Redis(1)——5种基本数据结构
一.Redis 简介 "Redis is an open source (BSD licensed), in-memory data structure store, used as a d ...
- 你真的懂Redis的5种基本数据结构吗?
摘要: 你真的懂Redis的5种基本数据结构吗?这些知识点或许你还需要看看. 本文分享自华为云社区<你真的懂Redis的5种基本数据结构吗?这些知识点或许你还需要看看>,作者:李子捌. 一 ...
- Redis基础——剖析基础数据结构及其用法
这是一个系列的文章,打算把Redis的基础数据结构.高级数据结构.持久化的方式以及高可用的方式都讲一遍,公众号会比其他的平台提前更新,感兴趣的可以提前关注,「SH的全栈笔记」,下面开始正文. 如果你是 ...
- Redis学习系列二之.Net开发环境搭建及基础数据结构String字符串
一.简介 Redis有5种基本数据结构,分别是string.list(列表).hash(字典).set(集合).zset(有序集合),这是必须掌握的5种基本数据结构.注意Redis作为一个键值对缓存系 ...
- Redis——基础数据结构
Redis提供了5种基础数据结构,分别是String,list,set,hash和zset. 1.String Redis所有的键都是String.Redis的String是动态字符串,内部结构类似J ...
随机推荐
- circos plot in R
FIN=read.table(IN,header=TRUE) circos.clear() circos.par("start.degree" = 90) circos.initi ...
- Linux(CentOS8) 安装 Docker
查询当前系统的相关信息 cat /etc/os-release 输入内容如下 校验当前CentOS内核版本 说明:Docker 要求 CentOS 的内核版本,至少高于 3.10 .低于 3.10 的 ...
- win服务项因各种原因出问题,删除注册表服务项
win7系统,可以cmd–>sc delete 服务名称win10计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 删除相关服务即 ...
- winform导出excel报'object' does not contain a definition for 'get_Range'的问题
现手上有个老项目采用.net framework3.0开发,改成4.0后,excel导出报'object' does not contain a definition for 'get_Range'的 ...
- SQLServer游标(Cursor)简单例子
DECLARE @username nvarchar(50),@password nvarchar(50),@num int--声明游标变量 DECLARE myCursor CURSOR FOR s ...
- laravel groupBy 分页
$model=DB::table('tablebname') ->where(function($query) use ($res){ $query->where('xx','xx'); ...
- DVWA-SQL Injection(SQL注入)
sql注入是典型.常见的Web漏洞之一,现在在网络中也可能存在,不过大多数为SQL盲注. 攻击者通过恶意的SQL语句来破坏SQL查询语句,达到数据库泄露的目的 LOW 审计源码 <?php // ...
- 【RSocket】使用 RSocket(二)——四种通信模式实践
Source Code: https://github.com/joexu01/rsocket-demo 0. 四种通信模式 让我们来简单复习一下 RSocket 的四种通信模式: 即发即忘 - Fi ...
- MySQL学习(十一)为什么不推荐使用uuid和雪花id
参考博客:https://www.cnblogs.com/wyq178/p/12548864.html 自增的主键的值是顺序的,所以Innodb把每一条记录都存储在一条记录的后面.当达到页面的最大填充 ...
- DES & 3DES 简介 以及 C# 和 js 实现【加密知多少系列】
〇.简介 1.DES 简介 DES 全称为 Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977 年被美国联邦政府的国家标准局确定为联邦资料处理标准( ...