顶部左侧内容
百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 在线教程 > 正文

一篇搞定Redis常用命令(redis常用命令整理简书)

gosiye 2024-09-04 05:37 7 浏览 0 评论

满怀忧思,不如先干再说!

前言

上节我们说到Redis的下载和安装,本章说一下Redis的常用命令。基本要求是了解都有哪些命令,不同的数据类型如何存取数据即可。以便后期使用Java语言操作Redis的时候知道它的实现方式其实就是对命令的封装!!!

命令分类

  1. 通用命令
  2. 字符串类型
  3. 哈希类型
  4. 列表类型
  5. 集合类型
  6. 有序集合类型

通用命令

这里列出我们常用的命令,全部命令请参考redis官网:【平台限制:地址放到评论区】

keys pattern

说明:遍历出所有的key,*为pattern参数,也就是匹配符,类似于正则表达式,keys命令一般不推荐在生产环境中使用,因为如果我们的key非常多,检索起来就非常慢,这个命令比较重,而且redis是单线程的会阻塞其他的命令,如果我们需要检索key,可以使用scan命令

127.0.0.1:6379> keys * 
 1) "k1"

dbsize

说明:计算key的总数

127.0.0.1:6379> dbsize 
(integer) 1

exists key

说明:查看key是否存在,返回值 1存在,0不存在

127.0.0.1:6379> exists k1 
(integer) 1 

127.0.0.1:6379> exists k2 
(integer) 0

del key[key...]

说明:删除指定的一个key或者一组key,返回值是删除key的个数

127.0.0.1:6379> del k1 
(integer) 1

expire key seconds

说明:设置key的过期时间,单位为秒,返回值1说明设置成功,返回0说明key不存在或设置失败

127.0.0.1:6379> expire k4 30 
(integer) 1

pexpire key milliseconds

说明:以毫秒为单位设置过期时间

127.0.0.1:6379> pexpire k5 90000 
(integer) 1

ttl key

说明:查看key的过期时间,以秒为单位,返回值-1永不过期,-2已过期

127.0.0.1:6379> ttl k5 
(integer) 87

pttl key

说明:查看key的过期时间以毫秒为单位

127.0.0.1:6379> pttl k1 
(integer) 76151

persist key

说明:移除key的过期时间

127.0.0.1:6379> persist k1 
(integer) 1 
127.0.0.1:6379> ttl k1 
(integer) -1

type key

说明:返回key对应的数据类型,分别为string、list、set、zset、hash五种数据类型,如果key不存在返回none

127.0.0.1:6379> type k1 
string 
127.0.0.1:6379> type k2 
none

Redis实现原理

数据结构和内部编码

Redis中的五种数据结构,每一种都有两种以上的内部实现,多种内部编码实现可以在不同应用场景下发挥各自优势。具体的编码实现后边补充一篇文章单独去说!

redis单线程

redis是单线程的,在同一个瞬间只可能执行一条命令

那么为什么redis的单线程会这么快呢?

1、主要原因是redis是纯内存操作,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)速度非常快

2、使用多路I/O复用模型,非阻塞I/O

3、单线程避免线程切换和竞态消耗,单线程指的是网络请求模块使用了一个线程(所以不需考虑并发安全性),即一个线程处理所有网络请求,其他模块仍用了多个线程。

注意

1、一次只执行一条命令

2、拒绝长(慢)命令

keys、flushall、flushdb、slow lua script等时间复杂度高的

String

说明

string 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 key 对应一个 value。value可以是简单字符串,也可以是复杂的字符串比如JSON,XML等,也可以是数字(小数、整数),甚至是图片或者序列化后的对象,value是一个安全的二进制数据,string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。

String类型的使用场景:用来做缓存、计数器、分布式锁等等。

常用命令

set key value : 设置 key 对应 string 类型的值, 返回 1 表示成功, 0 失败。(说明,设置key多次会覆盖) 
setnx(not exist) key value: 如果 key 不存在进行设置,存在就不需要进行设置了,返回0 
set key value [ex seconds/px milliseconds]: 设置值的同时设置过期时间 
get key: 获取 key 对应的 string 值,如果 key 不存在返回 nil(在redis中nil代表为空) 
getset key value : 先获取 key 的值,再设置 key 的值。 
mset key1 value1 … : 一次设置多个 key 的值, 成功返回 1 表示所有的值都设置了,失败返回 0 表示没有任何值被设置。 
mget key1 key2 … keyN : 一次获取多个 key 的值 
msetnx key1 value1 … : 一次设置多个 key 的值,但是不会覆盖已经存在的 key 
incr key: 递增,注意 incr 一个不是 int 的 value 会返回错误,incr 一个不在的 key,则设置 key 值为 1。 
decr key : 递减, decr 一个不存在 key,则设置 key 值为-1。 
incrby key integer: 对 key 加上指定值 , key 不存在设置 key,并认为原来的 value是 0。 
decrby key integer: 对 key 减去指定值。decrby 完全是为了可读性,我们完全可以通过 incrby一个负值来实现同样效果,反之一样。 
incrbyfloat key float:增加对应的浮点数,没有减去指定值,我们可以传入负数来实现该功能 
append[key]方法: 字符串追加方法 
strlen[key]方法: 获取字符串的长度 
getrange key startindex endstart 获取指定范围的字符串 
setrange key 10 value(10表示从第几位开始替换,后面跟上替换的字符串)

Hash

说明

Hash类型是String类型的field和value的映射表,或者说一个String集合。它特别适合存储对象相比较而言,将一个对象类型存储在Hash类型里要比存储在String类型里占用更少的内存空间并方便存取整个对象

Hash应用场景:用一个对象来存储用户信息,商品信息,订单信息等等。

常用命令

hset key field value: 设置 hash field 为指定值,如果 key 不存在,则创建 
hget key field : 获取指定的 hash field。 
hmget key filed1…fieldN : 获取全部指定的 hash filed。 
hmset key filed1 value1 … filedN valueN : 同时设置 hash 的多个 field。 
hincrby key field integer: 指定步长增加。成功返回 hash filed 变更后的值。 
hexists key field : 检测指定 field 是否存在。 
hdel key field: 删除指定的 hash field。
hlen key: 返回指定 hash 的 field 数量。 
hkeys key: 返回 hash 的所有 field。 
hvals key : 返回 hash 的所有 value。 
hgetall : 返回 hash 的所有 filed 和 value

与String对比

存储用户信息使用String和Hash存储有什么区别?

使用String类型存储

用户ID为查找的key,存储的value用户对象包含姓名,年龄,生日等信息,如果用普通的key/value结构来存储,主要有以下2种存储方式:

方式一:

第一种方式将用户ID作为查找key,把其他信息封装成一个对象以序列化的方式存储,这种方式的缺点是,增加了序列化/反序列化的开销,并且在需要修改其中一项信息时,需要把整个对象取回,并且修改操作需要对并发进行保护,引入CAS等复杂问题。

方式二:

第二种方法是这个用户信息对象有多少成员就存成多少个key-value对,用户ID+对应属性的名称作为唯一标识来取得对应属性的值,虽然省去了序列化开销和并发问题,但是用户ID为重复存储,如果存在大量这样的数据,内存浪费还是非常可观的

Hash存储

Redis的Hash实际是内部存储的Value为一个HashMap,并提供了直接存取这个Map成员的接口,Key仍然是用户ID, value是一个Map,这个Map的key是成员的属性名,value是属性值,这样对数据的修改和存取都可以直接通过其内部Map的Key(Redis里称内部Map的key为field), 也就是通过 key(用户ID) + field(属性标签) 就可以操作对应属性数据了,既不需要重复存储数据,也不会带来序列化和并发修改控制的问题,很好的解决了问题。

List

说明

list 列表是简单的字符串列表,按照插入顺序排序,数据可以重复。你可以添加一个元素到列表的头部(左边)或者尾部(右边),既可以作为栈,又可以作为队列

常用命令

lpush key string: 在 key 对应 list 的头部添加字符串元素,返回 1 表示成功, 0 表示 key 存在且不是 list 类型。 
rpush key string: 在 key 对应 list 的尾部添加字符串元素 
llen key: 返回 key 对应 list 的长度, 如果 key 不存在返回 0 
lrange key start end: 返回指定区间内的元素, 下标从 0 开始, 负值表示从后面计算, -1 表示倒数第一个元素 , key 不存在返回空列表。 
ltrim key start end : 截取 list 指定区间内元素,成功返回 OK, key 不存在返回错误。 
lset key index value: 设置 list 中指定下标的元素值,成功返回 1, key 或者下标不存在返回错误。 
lrem key count value : 从 List 的头部(count 正数)或尾部(count 负数)删除一定数量(count)匹配 value 的元素,返回删除的元素数量。count 为 0 时候删除全部。 
lpop key: 从 list 的头部删除并返回删除元素。 
rpop key: 从 list 的尾部删除并返回删除元素 
rpoplpush source destination: 从source列表中删除最后一个元素,添加到des列表中第一个 
lindex key index: 返回名称为key的list中index位置的元素 
linsert key BEFORE|AFTER pivot value:把 value 插入存于 key 的列表中在基准值 pivot 的前面或后面

List应用场景:好友列表,粉丝列表,消息队列,最新消息排行等

Set

说明

set是string类型的无序集合。集合是通过hashtable实现的,概念和数学中集合基本类似,可以交集,并集,差集等等,set中的元素是没有顺序并且不可重复。所以添加,删除,查找的复杂度都是O(1)

常用命令

sadd key member: 添加一个 string 元素到 key 对应 set 集合中,成功返回 1,如果元素以及在集合中则返回 0, key 对应的 set 不存在则返回错误。 
srem key member: 从 key 对应 set 中移除指定元素,返回删除个数,集合中不存在或者key不存在返回 0,如果 key 对应的不是 set 类型的值返回错误。 
spop key [count]: 删除并返回 key 对应 set 中随机的一个元素,如果 set 是空或者 key 不存在返回nil。 
srandmember key [count]: 随机取 set 中的一个元素,但是不删除元素。 
smove srckey dstkey member: 从 srckey 对应 set 中移除 member 并添加到 dstkey 对应 set 中,整个操作是原子的。 成功返回 1,如果 member 在 srckey 中不存在返回 0, 如果 key 不是 set类型返回错误。相当于剪切复制 
scard key: 返回 set 的元素个数,如果 set 是空或者 key 不存在返回 0。 
sismember key member: 判断 member 是否在 set 中,存在返回 1, 0 表示不存在或者 key 不存在。 
sinter key1 key2 …… keyN : 返回所有给定 key 的交集。 
sinterstore dstkey key1 … keyN : 返回所有给定 key 的交集, 并保存交集存到 dstkey 下。 
sunion key1 key2 … keyN: 返回所有给定 key 的并集。 
sunionstore dstkey key1 … keyN: 返回所有给定 key 的并集, 并保存并集到 
dstkey sdiff key1 key2 … keyN: 返回所有给定 key 的差集。
 sdiffstore dstkey key1 … keyN: 返回所有给定 key 的差集,并保存差集到 
dstkey smembers key: 返回 key 对应 set 的所有元素,结果是无序的,如果集合中数据很多,不建议使用 
scan key:扫描数据

Set应用场景:共同关注、共同喜好、二度好友、分类标签等功能

sorted set(Zset)

说明

sorted set 是有序集合, 它在 set 的基础上增加了一个顺序属性(score),这一属性在添加,修改元素的时候可以指定, 每次指定后, 会自动重新按新的值调整顺序。 可以理解了有两列的mysql 表,一列存 value,一列存score

常用命令

zadd key score member: 添加元素到集合,元素在集合中存在则更新对应 
score zrem key member: 删除指定元素, 1 表示成功,如果元素不存在返回 0 
zincrby key incr member : 增加对应 member 的 score 值, 然后移动元素并保持 skip list 保持有序。返回更新后的 score 值 
zrank key member : 返回指定元素在集合中的排名(下标), 集合中元素是按 score 从小到大排序的 
zrevrank key member : 同上,但是集合中元素是按 score 从大到小排序 
zrange key start end : 类似 lrange 操作从集合中去指定区间的元素。返回的是有序结果 
zrevrange key start end: 同上,返回结果是按 score 逆序的 
zrangebyscore key min max: 返回集合中 score 在给定区间的元素 
zcount key min max: 返回集合中 score 在给定区间的数量 zcard key: 返回集合中元素个数 
zscore key element: 返回给定元素对应的 score

sorted set使用场景:排行榜等

更多命令可以到Redis官网,因不能放置外链,将链接放到评论区,大家可以自行食用,如果不错记得关注,点赞哦!

相关推荐

全球最大的H5网站模板库(h5页面模板下载)

当今社会,互联网迅猛发展,在网络营销中,客户往往通过企业的网站建设留下对该企业的第一印象,一个优秀的企业网站已成为企业发展的重要纽带,嗨创H5,拥有国内外一流的技术团队,潜心专研网站建设6年,是全球最...

wordpress集团公司网站模板:XSgr(wordpress建站公司)

小兽wordpress推出一款高端集团公司主题,打造高品质官网。高端是一种态度和坚持,因为我坚信贴合产品及品牌理念的高端深度定制才能最大化地呈现企业的务实严谨与产品的专业品质相比,某种程度上讲–...

私心推荐,小编酷爱的五款高逼格网站模板

建站宝盒的网站模板上千套之多,各有各的风格色彩,但是,弱水三千,小编我却只取一瓢饮,在这上千套模板之中,小编酷爱的网站模板有五套,让小编私心推荐一下吧!1、茶叶贸易公司网站模板小编对这款网站模板可是一...

「书讯」政府网站用户行为研究与应用

《政府网站用户行为研究与应用》作者:刘合翔著出版日期:2018年6月开本:16开出版社:经济管理出版社小编推荐《政府网站用户行为研究与应用》的主题是关于政府网站用户行为的特征规律及其在政府网站优...

免费服务器-搭建模板网站的操作流程(图文版)

之前发文《创业者的官网:如何搭建免费云服务器及操作面板(图文版)》,因为做了视频才发现,创业者对视频的需求,远远低于对图文解说的需求。因此,补充图文教程,不清楚的看官们,可以直接看视频版本进行细部学...

快收藏这些高逼格H5网站模板吧,不绕弯子直接下载

上面这些响应式H5网站是不是很炫酷,比起那些“在线一键生成”是不是好太多了?关键是,那些一键制作都不会开放源码给你,自定义性也很局限。不过说到底还是难看。今天笔者推荐大家一个模板网站,全都是高质量的响...

如何开发网站建设管理系统模板(如何开发网站建设管理系统模板图片)

根据用户网站需求文档设计美工图,并设计数据库结构,让网站开发人员可以更多地关注前台美工,先对照美工图,编写静态HTML页面,按网站建设管理系统模板语法,修改编写好的静态HTML页面,运行。不再需要对...

C语言的数据类型介绍(c语言的数据类型介绍是什么)

在计算机系统中,数据是放在内存中的,数字、文字、符号、图形、音频、视频等数据都是以二进制形式存储在内存中的,它们并没有本质上的区别,那么0001000该理解为数字8呢,还是图像中某个像素的颜色...

C 语言格式化输出函数中常用的格式符号

在之前介绍输入输出函数的文章中,有提到格式化输入输出函数都有包含一种特殊的符号——格式符号。那篇文章中关于格式符号也只是一笔带过,没有进行深入挖掘。本篇文章主要对输出函数(printf)中的一些常用格...

C#中的类型转换(c#数据转换类)

计算机存储的基本单位:字节我们知道一个字节(Byte)有8个比特(bit)构成,比特是存储的最小单位,表示0和1,但为什么计算机存储的基本单位是字节,而不是比特呢?假设我们要存储数字3(二进制:11...

Java8中String内存空间占用分析(电脑里下载的文件怎样删除才不会占用内存空间)

1.前言分析之前,简单回顾一下对象的内存分布。在HotSpot虚拟机中,对象在堆内存中的存储布局可以划分为三部分:对象头、实例数据和对齐填充。对象头包含两部分内容:MarkWord和类型指针。实例数据...

「每日C语言」数据类型大小和取值范围

对于c语言来说,数据类型是一个很重要的概念和知识点,它涉及到的是内存的空间,这在和硬件交互的时候是非常重要的。K&R给出了7个数据类型相关的关键字,分别是:int、long、short、uns...

【c语言学习笔记】数据类型(c语言里面的数据类型)

c语言学习笔记,欢迎大家能在评论区提出我学习错误的地方方便我进行改正~在计算机中,计算机用二进制来储存数据,在c语言中有许多的数据类型用来存储数据,当然不同的数据类型所用的内存占用也不一样,下面就来用...

关于MySQL varchar类型最大值,原来一直都理解错了

我是架构精进之路,点击上方“关注”,坚持每天为你分享技术干货,私信我回复“01”,送你一份程序员成长进阶大礼包。写在前面关于MySQLvarchar字段类型的最大值计算,也许我们一直都理解错误了,...

C语言数据类型的转换(c语言数据类型的转换方式)

类型转换在C语言程序中,经常需要对不同类型的数据进行运算,为了解决数据类型不一致的问题,需要对数据的类型进行转换。例如一个浮点数和一个整数相加,必须先将两个数转换成同一类型。C语言程序中的类型...

取消回复欢迎 发表评论: