redis入门基础知识(一)
一,介绍redis
1.1 redis的简单介绍
Redis(REmote DIctionary Server):远程字典服务器,redis是开源免费的应用,用ANSI C语言编写,遵守BSD协议(一种自由度很高的开源协议),是一个高性能的(Key/Value)分布式内存数据库,基于内存运行(运行速度快)并支持持久化的NoSQL(Not Only SQL)数据库。使用了单线程架构,预防了多线程可能产生的竞争问题。Redis又被成为数据结构服务器。
二、redis数据类型
几乎所有编程语言都提供了类似字典的功能,例如java中的map,python中的dict,类似于这种祖师数据的方式叫做基于键值的方式,与很多键值对数据库不同的是,Redis中的值,不仅可以是字符串,而且还可以是具体的数据结构,这样不仅能便于在许多应用场景的开发,同时也能够提高开发效率。
Redis支持五大数据类型:string 字符串,hash 哈希,list 列表,set 集合 、zset (sorted set) 有序集合。
String是Redis最基本的数据类型,可以理解与Memcached一模一样的类型,一个key对应一个value;String类型是二进制安全的,可以包含任何数据,甚至是jpg图片或者序列化的对象。一个Redis中字符串value最多可以是512MB。
Hash类似java中的Map,是一个键值对集合。是一个String类型的field和value的映射表,hash特别适合用于存储对象,类似java中的Map<String,Object>.
List(列表)在Redis中是简单的字符串列表,按照插入顺序排序。可以添加一个元素到列表的头部(左边)或者尾部(右边),底层是链表。
set(集合)是String类型的无序集合。是通过HashTable实现的。
Zset(sorted set:有序集合)和set一样也是String类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。
Redis正是通过分数来为集合中的成员进行升序排序。zset的成员是唯一的,但分数(score)却可以重复。
Redis常用数据类型操作命令(详细)参照:redis命令参考
三、redis数据结构应用
3.1 键(key)的应用(常用的关于key的命令)
序号 | 命令 | 命令说明 |
1 | DEL key | 该命令用于在key存在时删除key |
2 | DUMP key | 序列化给定的key,并返回被序列化的值 |
3 | EXISTS key | 检查给定key是否存在,返回1或者0 |
4 | EXPIRE key seconds | 为给定的key设置过期时间 |
5 | EXPIREAT key timestamp | EXPIREAT与EXPIRE类似,都用于为key设置过期时间。不同在于EXPIREAT命令接受的时间参数是UNIX时间戳(Unix timestamp)。 |
6 | PEXPIRE key millseconds | 设置key的过期时间以毫秒为单位 |
7 | PEXPIREAT key milliseconds-timestamp | 设置key过期时间的时间戳(Unix timestamp)以毫秒为单位 |
8 | KEYS pattern | 查找所有符合给定模式(pattern)的key |
9 | MOVE key db | 将当前数据库的key移动到给定的数据库db当中 |
10 | PERSIS key | 移除key的过期时间,key将持久保持 |
11 | PTTL key | 以毫秒为单位返回key的剩余的过期时间 |
12 | TTL key | 以秒为单位,返回给定key的剩余生存时间(TTL,time to live)。-1表示用不过期,-2表示已经过期 |
13 | RANDOMKEY | 从当前数据库中随机返回一个key |
14 | RENAME key newkey | 修改key的名称 |
15 | RENAMENX key newkey | 仅当newkey 不存在时,将key改名为newkey |
16 | TYPE key | 返回key所存储的值的类型 |
3.2字符串相关的命令(单值单value)
序号 | 命令 | 命令说明 |
1 | SET key value | 设置指定key的值 |
2 | GET key | 获取指定key的值 |
3 | GETRANGE key start end | 返回key中字符串值的子字符 |
4 | GETSET key value | 将给定key的值设为value,并返回key的旧值(old value) |
5 | GETBIT key ofset | 对key所存储的字符串值,获取指定偏移量上的位(bit) |
6 | MGET key1[key 2...] | 获取所有(一个或多个)给定key的值 |
7 | SETBIT key offset value | 对key所存储的字符串值,设置或清除指定偏移量上的位(bit) |
8 | SETEX key seconds value | 将值value关联到key,并将key的过期时间设为seconds为单位 |
9 | SETNX key value | 只有在key不存在时设置key的值 |
10 | SETRANGE key offset value | 用value参数覆写给定可以锁存储的字符串值,从偏移量offset开始 |
11 | STRLEN key | 返回key所存储的字符串值的长度 |
12 | MSET key value[key value...] | 同时设置一个或多个key -value对 |
13 | MSETNX key value[key value...] | 同时设置一个或多个key-value对,当且仅当所有给懂的key都不存在 |
14 | PESETEX key millseconds value | 这个命令和SETEX命令类似,但它以毫秒为单位设置key的生存时间,而不是像SETEX那样以秒为单位 |
15 | INCR key | 将key中存储的数值增一 |
16 | INCRBY key increment | 将key所储存的值加上给定的增量值(increment) |
17 | INCRBYFLOAT key increment | 将key所储存的值加上给定的浮点增量值(increment) |
18 | DECR key | 将key中存储的数值减一 |
19 | DECRBY key decrement | 将key所储存的值加上给定的减量值(decrement) |
20 | APPEND key value | 如果key已经存在并且是一个字符串,APPEND命令将value追加到key原来的值的末尾 |
3.3 List(列表)常用的命令
序号 | 命令 | 命令说明 |
1 | BLPOP key1[key2] timeout | 移出并获取列表的第一个元素,如果列表没有元素会阻塞列表知道等待超时或发现可弹出元素为止 |
2 | BRPOP key1[key2] timeout | 移出并获取列表的最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止 |
3 | BRPOTLPUSH source destination timeout | 从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它;如果列表没有元素会阻塞列表只到等待超时或发现可弹出元素为止。 |
4 | LINDEX key index | 通过索引获取列表中的元素 |
5 | LINSERT key BEFORE | AFTER pivot value | 在列表的元素前或者后边插入元素 |
6 | LLEN key | 获取列表长度 |
7 | LPOP key | 移出并获取列表的第一个元素 |
8 | LPUSH key value1[value2] | 将一个或多个值插入到列表头部 |
9 | LPUSHX key value | 将一个或多个值插入到已经存在的列表的头部 |
10 | LRANGE key start stop | 获取列表指定范围内的元素 |
11 | LREM key count value | 移除列表元素 |
12 | LSET key index value | 通过索引设置列表元素的值 |
13 | LTRIM key start stop | 对一个泪飚进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素将被删除。 |
14 | RPOP key | 移除并获取列表最后一个元素 |
15 | RPOPLPUSH source destination | 移除列表的最后一个元素,并将该元素添加到另一个列表并返回 |
16 | RPUSH key value1[value2] | 在列表中添加一个或多个值 |
17 | RPUSHX key value | 为已存在的列表添加值 |
这里,表中的key是给定列表的名字,不是键了
链表性能总结:
它是一个字符串链表,left、right都可以插入添加;
如果键不存在,创建新的链表;
如果键已存在,新增内容;
如果值全移除,对应的键也就消失了。
链表的操作无论是头和尾效率都极高,但假如是对中间元素进行操作,效率就很惨淡了。
3.4 Hash(哈希)常用的相关命令
序号 | 命令 | 命令说明 |
1 | HDEL key field1[field2] | 删除一个或多个哈希表字段 |
2 | HEXISTS key field | 查看哈希表key中,指定的字段是否存在 |
3 | HGET key field | 获取存储在哈希表中指定字段的值 |
4 | HGETALL key field | 获取在哈希表中指定key的所有字段和值 |
5 | HINCRBY key field increment | 为哈希表key中的指定字段的整数值加上增量increment |
6 | INCRBYFLOAT key field increment | 为哈希表key中指定字段的浮点数值加上增量increment |
7 | HKEYS key | 获取所有哈希表中的字段 |
8 | HLEN key | 获取哈希表中字段的数量 |
9 | HMGET key field1[field2] | 获取所有给定字段的值 |
10 | HMSET key field1 value1[field2 value2] | 同时将多个field --value(域--值)对设置到哈希表key中 |
11 | HSET key field value | 将哈希表key中的字段field的值设为value |
12 | HSETNX key field value | 只有在字段field不存在时,设置哈希表字段的值 |
13 | HVALS key field value | 获取哈希表中所有值 |
14 | HSCAN key cursor [MATCH pattern][COUNT count] | 迭代哈希表中的键值对。 |
这里,表中的key是给定哈希表的名字,不是键了
哈希表中KV模式不变但V是一个键值对
3.5 Set集合常用命令(单值多value)
序号 | 命令 | 命令说明 |
1 | SADD key member1[member2] | 向集合添加一个或多个成员 |
2 | SCARD key | 获取集合key的成员数 |
3 | SDIFF key1[key2] | 返回给定所有集合的差集 |
4 | SDIFFSTORE destination key1[key2] | 返回给定所有集合的差集边存储在destination中 |
5 | SINTER key1[key2] | 返回给定所有集合的交集 |
6 | SINTERSTORE destination key1[key2] | 返回给定所有集合的交集并存储在destination中 |
7 | SISMEMBER key member | 判断member元素是否是集合key的成员 |
8 | SMEMBERS key | 返回集合key的所有成员 |
9 | SMOVE mource destination member | 将member元素从source集合移动到destination集合 |
10 | SPOP key | 移除并返回集合key中的一个随机元素 |
11 | SRANDMEMBER key [count] | 返回集合key中一个或多个随机数 |
12 | SREM key member1[member2] | 移除集合中的一个或多个成员 |
13 | SUNION key1[key2] | 返回所有给定集合的并集 |
14 | SUNIONSTORE destination key1[key2] | 所有给定集合的并集存储在destination集合中 |
15 | SSCAN key cursor [MATCH pattern][COUNT count] | 迭代集合中的元素 |
这里,表中的key是给定集合的名字,不是键了,差集(sdiff)和交集(sinter)和并集(sunion)可以参考数学中的集合,可以利用韦恩图来加深理解。
3.6、有序集合Zset(sorted set)常用命令
有序集合Zset是在set基础上加了一个score值。set是k1 v1 k2 v2,Zset是k1 score1 v1 score2 v2
序号 | 命令 | 命令说明 |
1 | ZADD key score1 member1 [score2 member2] | 向街序集会添拥一个或多个坦克员, 或者重新已存在成员的分缴 |
2 | ZCARD key | 获取有序集合的成员数 |
3 | ZCOUNT key min max | 计算在有序集会中指定区间分数的成员数 |
4 | ZINCRBY key increment member | 有序集合中对指定成员的分数加上增量increment |
5 | ZINTERSTORE destination numkeys key[key...] | 计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合key中 |
6 | ZLEXCOUNT Key min max | 在有序集合中计算指定字典区间内成员数量 |
7 | ZRANGE key start stop[WITHSCORES] | 通过索引区间返回有序集合指定区间内的成员 |
8 | ZRANGEBYLEX key min max[LIMIT offset count] | 通过字典区间返回有序集合的成员 |
9 | ZRANGEBYSCORE key min max[WITHSCORES][LIMIT] | 通过分数返回有序集合指定区间内成员 |
10 | ZRANK key member | 返回有序集合中指定成员的索引 |
11 | ZREM key member[member...] | 移除有序集合中的一个或多个成员 |
12 | ZREMRANGEBYlEX key min max | 移除有序集合中给定的字典区间的所有成员 |
13 | ZREMRANGEBYRANK key start stop | 移除有序集合中给定的排名区间的所有成员 |
14 | ZREMRANGEBYSCORE key min max | 移除有序集合中给定的分数区间的所有成员 |
15 | ZREVRANGE key start stop [WITHSCORES] | 返回有序集中指定区间内的成员,通过索引, 分数从高到底 |
16 | ZREVRANGEBYSCORE key max min [WITHSCORES] | 返回有序集中指定分数区间内的成员, 分数从高到低排序 |
17 | ZREVRANK key member | 返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序 |
18 | ZSCORE key member | 返回有序集中, 成员的分数值 |
19 | ZUNIONSTORE destination numkeys key[key...] | 计算给定的一个或多个有序集的并集, 并存储在新的key 中 |
20 | ZSCAN key cursor [MATCH pattem] [COUNT count] | 送代有序集合中的元素( 包括元素成员和元素分值) |
更多更全面的命令可参考:Redis 命令参考
redis入门基础知识(一)相关推荐
- Python培训入门基础知识学什么?
Python培训基础知识主要是针对一些零基础的同学安排的,虽说Python是相对比较简单的一门编程语言,但是没有基础的同学还是要进行系统的学习,那么Python培训入门基础知识学什么呢?来看看下面小编 ...
- NLP汉语自然语言处理入门基础知识介绍
NLP汉语自然语言处理入门基础知识介绍 自然语言处理定义: 自然语言处理是一门计算机科学.人工智能以及语言学的交叉学科.虽然语言只是人工智能的一部分(人工智能还包括计算机视觉等),但它是非常独特的一部 ...
- 负荷计算的时候assert失败_负荷计算的入门基础知识,小白入门必备!
负荷计算是电气设计人员必须掌握的一必修课,选导体.设备还有保护开关的选择,电网系统分析,都离不开负荷计算的内容,为此小编特意总结9个负荷计算的入门基础知识,分享给大家,希望能在工作和学习中作为一份参考 ...
- python笔记基础-Python入门基础知识学习笔记之一
为什么要写这篇文章? 本人做过Objective-C开发,现在在用C#做WinForm开发.近段时间在学习Python入门基础知识时,发现有很多知识点和Objective-C的不一样.故想通过本文记录 ...
- 电脑的基础知识_电脑入门基础知识
电脑入门基础知识 学习电脑应该先了解电脑的基本的组件,然后学习操作,包括键盘.鼠标的使用,能基本使用操作系统,再学习打字. 作为一个电脑小白,想要学习电脑,首先要知道如何操作,学习打字,接着就是熟练使 ...
- ***入门基础知识(超全)
***入门基础知识(超全) [sell=2] DOS 常用命令: dir 列文件名 deltree 删除目录树 cls 清屏 cd 改变当前目录 copy 拷贝文件 diskcopy 复制磁盘 de ...
- Python入门基础知识学什么?
Python基础知识主要是针对一些零基础的同学安排的,虽说Python是相对比较简单的一门编程语言,但是没有基础的同学还是要进行系统的学习,那么Python入门基础知识学什么呢?来看看下面小编的详细介 ...
- 半小时入门MATLAB编程入门基础知识:
https://learnxinyminutes.com/docs/zh-cn/matlab-cn/ 半小时入门MATLAB编程入门基础知识: % 以百分号作为注释符 %{ 多行注释 可以 这样 表示 ...
- C语言入门基础知识有哪些?
众所周知C语言经久不衰,并且很多人都想要成为C语言工程师,为了能够做好C语言技术学习,需要知晓C语言入门基础知识有哪些. 用一个简单的C程序例子,介绍C语言的基本构成.格式.以及良好的书写风格,使小伙 ...
最新文章
- 开发工具之pycharm 快捷键说明
- Linux下的网络远程安装
- MyBatis和hibernate本质区别与应用场景
- Scrapy运行中常见网络相关错误
- 俄罗斯博士用树莓派自制灭蚊武器!
- 从零开始编写深度学习库(四)Eigen::Tensor学习使用及代码重构
- 你在为疯狂圣诞节海报做准备了么?
- 分治,递归,贪心算法,动态规划的关系
- r求矩阵某一列的标准偏差_如何在R中找到标准偏差?
- github git clone ssh协议 clone超慢解决方案,提高Github Clone速度
- 云龙51单片机视频教程+课件+程序代码+课后作业,零基础入门视频教程
- 任正非:战略思想家的典范
- 2019测试指南-web应用程序安全测试(二)指纹Web应用程序
- 入股不亏!LINQ凭什么被誉为最好的技术?
- 简单分账系统的分账流程是什么样的?
- 4384---一方通行与最后之作 (sdut oj)
- 小黄的日记,爱情本该如此
- 我们的时空之旅(一)——丽江古城
- 机遇与危机,婚庆行业的转型之路
- 支付宝AR扫福背后的故事
热门文章
- 将参数传递给Bash函数
- 推送后更改git commit消息(假设没有人从远程拉出)
- simscape multibody仿真报错装配位置_大型结构件虚拟装配仿真软件,三维数字化分析,现场直接调整...
- java 同时修改同一个数据_Java 语言中锁的设计与应用
- 验1-8 输出倒三角图案 (5 分)
- <select> 表单元素
- joomla添加html,如何将自定义html代码添加到Joomla 2.5菜单项?
- linux执行命令带时间戳,Linux查看History记录加时间戳的小技巧
- SpringCloud实战五:统一配置中心
- 【leetcode】940. Distinct Subsequences II