Redis 的特点及命令大全
创始人
2024-02-08 12:40:40
0

哈喽大家好,我是阿Q!

概念篇

一提到Redis,大家听到最多的应该就是“主从”、“集群”、“哨兵”了吧。对于不太精通的同学来说,乍一听这些概念,有的人会心向往之,有的人会望而却步。今天我们先来扒一扒Redis的“底Ku”。

什么是 Redis?

RedisREmote DIctionary Server的简称,意为“远程字典服务器”。它是基于BSD协议的完全开源的高性能的key-value数据库。

它是一个单线程却性能极好的内存数据库,所有的操作都是按照顺序线性执行的,避免了不必要的上下文切换和竞争条件。

采用非阻塞I/O的形式进行通信,利用Epoll的多路复用特性,提高了I/O效率。

给大家提供两个官方网址:

  • 中文网站:http://www.redis.cn/
  • 英文网站:http://www.redis.io/

默认16个库:0-15,默认使用0库;统一密码,默认端口6379(九宫格的merz

Redis的特点

  • 内存存储和持久化:支持异步将内存中的数据写到硬盘上,同时不影响“取最新N个数据”的服务操作,重启的时候可以再次加载进内存
  • 发布、订阅消息系统
  • 定时器、计数器:可设定过期时间
  • 数据结构多样:支持Stringlistsetzsethash等多种数据结构的存储
  • 数据备份:即master-slave模式的数据备份
  • 高性能:读的速度是110000次/s,写的速度是81000次/s
  • 原子性:所有操作都是原子性的:单个操作是原子性的;多个操作也支持事务,通过MULTIEXEC指令包起来

之前我们已经介绍过Redis的安装,此处不再赘述。

命令篇

key命令

  • select dbdb为数字,表示切换数据库为db
  • Dbsize:查看当前数据库的key的数量
  • Flushdb:清空当前库的所有key
  • Flushall:清空所有库的key(几乎不用)
  • keys * :所有key罗列
  • exists key:判断key是否存在
  • move key db:将key移动到db库(当前库的key没有了),如果当前库不存在key,则失败;如果当前库与db库都存在key值,则不移动
  • expire key seconds:为key设置过期时间
  • ttl key:查看还有多少秒过期,-1表示永不过期,-2表示已过期
  • type key:查看你的key是什么类型
  • del key:删除key

执行命令:1生效,0不生效

String(字符串)

一个key对应一个value,一个键最大能存储512MB,是二进制安全的。

命令

  • SET key value:设置key的值
  • GET key:获取key的值
  • del key:删除key
  • append key value:如果key已经存在并且是一个字符串,APPEND命令将指定的value追加到该key原来值(value)的末尾
  • strlen key:返回key所储存的字符串值的长度
  • getrange key start end:返回key中字符串值的子字符;(0,-1)返回全部
  • setrange key offset value:用value参数覆写给定key所储存的字符串值,从偏移量offset开始
  • setex key seconds value:(set with expire)给key设置value,并在seconds秒后过期
  • setnx key value:(set if not exist)先判断keyvalue是否存在,不存在再插入,防止覆盖
  • mset key value [key value ...]:同时设置一个或多个key-value
  • mget key1 [key2...]:同时获取一个或者多个keyvalue
  • msetnx key value [key value ...]:同时设置一个或多个key-value对,当且仅当所有给定key都不存在(有存在,有不存在的都不存)
  • getset key value:将给定key的值设为value,并返回key的旧值(old value)。

一定要是数字才能进行加减

  • incr key:将key中存储的数字加一
  • decr key:将key中储存的数字值减一
  • incrby key increment:将key所储存的值加上给定的增量值(increment
  • decrby key decrement:将key所储存的值减去给定的减量值(decrement

Hash(哈希)

键值对集合,适合存储对象,类似于java中的map;每个hash可以存储2^32 -1 键值对(40多亿)

命令

  • hset key field value:将哈希表key中的字段field的值设为value
  • hget key field:获取存储在哈希表中指定字段的值
  • hmset key field1 value1 [field2 value2]:同时将多个field-value(域-值)对设置到哈希表key
  • hmget key field1 [field2]:获取所有给定字段的值
  • hgetall key:获取在哈希表中指定key的所有字段和值
  • hdel key field1 [field2]:删除一个或者多个哈希表字段
  • hlen key:获取哈希表中字段的数量
  • hexists key field:查看哈希表key中,指定的字段是否存在
  • hkeys key:获取哈希表中所有field的值
  • hvals key:获取哈希表中所有value的值
  • hincrby key field increment:哈希表key中指定字段的整数值加上增量increment
  • hincrbyfloat key field increment:哈希表key中指定字段的浮点数值加上增量increment
  • hsetnx key field value:只有在字段field不存在时,设置哈希表字段的值

List(列表)

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

  • lpush从左边(首)插入,rpush从右边(尾)插入
  • lpop从左边移除元素并返回该元素,rpop从右边移除元素并返回该元素

列表最多可存储2^32 - 1元素(每个列表可存储40多亿)。

命令

  • lpush key value[value...]:将一个或多个值插入到列表头部
  • rpush key value[value...]:将一个或多个值插入到列表尾部
  • lrange key start stop:获取队列指定范围内的元素
  • lpop key:移出并获取列表的第一个元素
  • rpop key:移除列表的最后一个元素,返回值为移除的元素
  • lindex key index:按照索引下标获得元素,也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
  • llen key:获取列表长度
  • lrem key count value:删除countvalue
  • ltrim key start stop:对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除(闭区间
  • rpoplpush source destination:移除列表的最后一个元素,并将该元素添加到了另一个列表并返回(尾出头入)
  • lset key index value:将keyindex位置设置为value
  • linsert key before/after 【point】 value:在列表的元素前或者后插入元素

性能

  1. 如果键不存在,则创建新的链表;
  2. 如果键已存在,新增内容;
  3. 如果值全部移除,对应的键也就消失了;
  4. 链表的操作头和尾效率都极高,但假如是对中间元素进行操作,效率就很惨淡了。

Set(集合)

RedisSetString类型的无序集合,集合成员是唯一的。集合是通过哈希表(HashTable)实现的,所以添加、删除、查找的复杂度都是 O(1)。集合中最大的成员数为2^32 - 1( 每个集合可存储40多亿个成员)。

命令

  • sadd key member[member...]:集合中添加一个或者多个成员(无序)
  • smembers key:返回集合中的所有成员
  • sismember key member:判断member元素是否是集合key的成员
  • scard key:获取集合的成员数
  • srem key member[member...]:删除集合中的一个或者多个元素
  • srandmember key [count]:返回集合中一个或多个随机数---------适合做挖财项目
  • spop key:移除并返回集合中的一个随机元素
  • smove source destination member:将member元素从source集合移动到destination

数学集合类

  • sdiff key1 [key2]:返回第一个集合与其他集合之间的差异
  • sinter key1 [key2]:返回给定所有集合的交集
  • sunion key1 [key2]:返回所有给定集合的并集

zset(sorted set有序集合)

Rediszsetset一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。

redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。添加元素到集合,元素在集合中存在则更新对应score

命令

  • zadd key score1 member1 [score2 member2]:向有序集合添加一个或者多个成员,或者更新已存在成员的分数
  • ZRANGE key start stop [WITHSCORES]:通过索引区间返回有序集合指定区间内的成员(是否包含分数信息)
  • ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT]:通过分数返回范围内的member成员(是否包含分数),其中“(”表示不包含;limit作用是返回限制 (limit start count

示例:
zrangebyscore zset01 60 (90 withscores limit 2 2:从zset01中选取分数大于等于60,小于90的从第二个索引开始往后两个的成员

  • zrem key member[member...]:移除有序集合中的一个或多个成员
  • zcard key:获取有序集合的成员数
  • zcount key min max:获取有序集合的大于min小于max的成员数
  • zrank key member:获取member的索引
  • zscore key member:获取有序集合的member的分数

REV

  • ZREVRANK key member:返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序
  • ZREVRANGE key start stop [WITHSCORES]:通过索引返回有序集中指定区间内的成员,分数从高到低
  • ZREVRANGEBYSCORE key max min [WITHSCORES]:返回有序集中指定分数区间内的成员,分数从高到低排序

以上就是今天的全部内容了。阿Q将持续更新java实战方面的文章,感兴趣的可以关注下,也可以来技术群讨论问题呦!

相关内容

热门资讯

虞书欣谈成名的代价令人心疼,如... 虞书欣谈成名的代价令人心疼,如今她在圈内的前景如何?虞书欣在圈内前景是很不错的,大家都很喜欢她,也有...
最有效的减肥食谱 最有效的减肥食谱谁有最有效的减肥食谱呢?麻烦给一个吧?急求最有效的减肥食谱,听说有一个什么汤的可以很...
关晓彤鹿晗被曝月底会分手,你对... 关晓彤鹿晗被曝月底会分手,你对于他们两个的爱情有什么看法?当初我也觉得他们俩的感情肯定不会长久的,但...
她曾在家中喂猪,却被张艺谋相中... 她曾在家中喂猪,却被张艺谋相中一夜成名,魏敏芝如今过得怎样?魏敏芝过得非常不错啊,而且当地的头衔也是...
电影《中邪》主要讲了什么? 电影《中邪》主要讲了什么?中邪的剧情简介 · · · · · ·大学生丁鑫和刘梦为拍摄农村风俗纪录片...
可以在营业厅查到短信的内容吗? 可以在营业厅查到短信的内容吗?查自己的短信==如果你是本人应该可以…不是本人是不可以的那是别人的隐私...
春日时雨时晴,杏花开时,小雨落... 春日时雨时晴,杏花开时,小雨落在身上,衣服欲湿未湿;杨柳风最柔,吹到脸上也下觉其寒。是什么诗句沾衣欲...
低学历的女人真的不能娶吗? 低学历的女人真的不能娶吗?我觉得不是的,娶妻子还是主要看对方的品性如何,而不是在意对方的学历。不一定...
电影配音问题 懂的进来 不是很... 电影配音问题 懂的进来 不是很难我想知道一个问题 比如说 一个电影 演员是 X 那他的说...可以是...
关于大蒜的谜语有哪些 关于大蒜的谜语有哪些有关蒜的谜语有:两二小,头长草 (打字一)谜底:蒜弟兄七八个,围着柱子坐,只要一...
怎么夸老师漂亮 怎么夸老师漂亮老师您长得太有气质了,非常出众,我身为一个女孩子都快要把持不住了。就直接一点说:老师你...
一般怎么钢琴即兴伴奏,一拿到简... 一般怎么钢琴即兴伴奏,一拿到简谱就能伴奏的和弦 天空之城简易般的可一参考 摸摸就出来的 弹一个音 ...
我对异地女友说,异地太苦了我真... 我对异地女友说,异地太苦了我真心问你,你和我一起内心快乐吗?她说,不管日子再苦,有你就是甜的?你一个...
为什么叫镇江 为什么叫镇江为什么叫镇江意义为"Garrison of the Yangtze River"
在足球历史上,阿贾克斯都获得过... 在足球历史上,阿贾克斯都获得过多少次欧冠?一共应该是获得过4次冠军,而且他真的是特别厉害,很少有人可...
时间简史是谁写的? 时间简史是谁写的?史蒂芬·威廉·霍金
我爱她,但她爱他。 我爱她,但她爱他。如果换了我是你!我会一直的爱着她!她爱着他,你又爱着他!她知道爱一个不爱自己人的资...
歌词:我是你的月亮,是你夜里的... 歌词:我是你的月亮,是你夜里的光芒。叫月光曲,嘿嘿
枪神纪里面的英文歌曲叫什么? 枪神纪里面的英文歌曲叫什么?枪神纪里面的英文歌曲叫什么?一首是男的一首是女的,女的那首好像有一句是,...
中外小朋友 大家手拉手 来自五... 中外小朋友 大家手拉手 来自五大洲 是什么歌名?中外小朋友 大家手拉手 来自五大洲 是什么歌名?《庆...