Redis之五大基本的数据类型:字符串String 散列hashes 列表 lists 集合sets 有序集合sorted sets 基础命令讲解

news/2024/12/1 18:58:11/

一:字符串

对字符串的操作

创建字符串,获取键值并判断字符串是否存在,查询键的长度,往指定字符串添加数据

127.0.0.1:6379> set name buxiangshuixiangdemeng      //创建一个键,并赋值
OK
127.0.0.1:6379> get name                                               //获取键值
"buxiangshuixiangdemeng"
127.0.0.1:6379> exists name                                           /判断name这个键是否存在,1:存在 0不存在
(integer) 1
127.0.0.1:6379> strlen name                                      //查询键的长度
(integer) 22
127.0.0.1:6379> APPEND name 'csdn'                    //往指定键添加字符串
(integer) 26
127.0.0.1:6379> get name                 
"buxiangshuixiangdemengcsdn"
127.0.0.1:6379> STRLEN name
(integer) 26
127.0.0.1:6379> 

模拟浏览量的增加和减少 

模拟浏览量的增加和减少:实现i++ 或者是i--以及 i++n与i--n

127.0.0.1:6379> set view 0                 //设置默认的基础值
OK
127.0.0.1:6379> get view 
"0"
127.0.0.1:6379> incr view                     //默认每次加一
(integer) 1 
127.0.0.1:6379> get view
"1"
127.0.0.1:6379> decr view                   //默认每次减一
(integer) 0
127.0.0.1:6379> get view
"0"
127.0.0.1:6379> incrby view 10            //指定数目进行增加
(integer) 10
127.0.0.1:6379> decr view
(integer) 9
127.0.0.1:6379> decrby view 5             //指定数目进行减少
(integer) 4
127.0.0.1:6379>  

 获取字符串的指定数据

获取字符串的指定数据

127.0.0.1:6379> set key1 buxiangshuixingdemeng
OK
127.0.0.1:6379> get key1
"buxiangshuixingdemeng"
127.0.0.1:6379> GETRANGE key1 0 2                //获取字符串的0到2的数据
"bux"
127.0.0.1:6379> GETRANGE key1  0 -1              //获取全部的字符串数据
"buxiangshuixingdemeng" 

 替换字符串的数据 

替换字符串的数据 

127.0.0.1:6379> set key2 'abcdefg'   
OK
127.0.0.1:6379> get key2
"abcdefg"
127.0.0.1:6379> SETRANGE key2 1 xxx         设置从1开始设置xxx
(integer) 7
127.0.0.1:6379> get key2
"axxxefg"

时间锁,到时间创建的键自动注销

时间锁,到时间创建的键自动注销

setex:设置过期时间

setnx:不存在过于时间的设置

127.0.0.1:6379> setex key3 30 'deno1'            //设置key3这个键30秒自动注销
OK
127.0.0.1:6379> get key3
"deno1"
127.0.0.1:6379> ttl key3                        //查询键离注销还剩下多少时间
(integer) 14
127.0.0.1:6379> ttl key3
(integer) 7
127.0.0.1:6379> SETNX key3 'redis'   //时间设置,如果键不存在则进行创建,键值为redis
(integer) 1
127.0.0.1:6379> get key3
"redis"
127.0.0.1:6379> SETNX key3 'mysql'      //已经存在的键,在设置重名的键,原本的键并不会被覆盖掉
(integer) 0
127.0.0.1:6379> get key3      //还是原本的数据
"redis"
127.0.0.1:6379>  

批量添加 

批量添加

127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3      k1为键 v1为键值 依次创建
OK
127.0.0.1:6379> keys *
1) "k3"
2) "k2"
3) "k1"
127.0.0.1:6379> MGET k1 k2 k3             批量调用多个键
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> MSETNX k1 vv k4 v4      如果新创建的key在原本的数据中已存在,则创建失败返回值为0:具有原子性,要么一起成功,要么都不成功
(integer) 0
127.0.0.1:6379>  


创建一个对象:设置新属性 

创建一个对象:设置新属性

127.0.0.1:6379> MSET user:1:name ma user:1:age 22
OK
127.0.0.1:6379> MGET user:1:name user:1:age    获取数据值
1) "ma"
2) "22"
127.0.0.1:6379>  

 组合命令getset先执行get方法,然后在执行set方法 

 组合命令getset先执行get方法,然后在执行set方法

127.0.0.1:6379> FLUSHDB
OK

127.0.0.1:6379> getset key1 demo            没有该键则返回nil,并通过set方法进行创建    
(nil)
127.0.0.1:6379> get key1
"demo"
127.0.0.1:6379> getset key1 dddd          先获取原始数据,然后在进行set方法
"demo"
127.0.0.1:6379> get key1
"dddd"

二:LIst数组

L默认的情况是左 R默认的情况则是右

Lpush 则是左添加,Rpush则是右添加 

L默认的情况是左 R默认的情况则是右

Lpush 则是左添加,Rpush则是右添加 

127.0.0.1:6379> FLUSHALL     清空
OK
127.0.0.1:6379> LPUSH list one    创建一个数组,并添加一个数据
(integer) 1
127.0.0.1:6379> LPUSH list two      左添加数据
(integer) 2
127.0.0.1:6379> LPUSH list three   左添加数据
(integer) 3
127.0.0.1:6379> LRANGE list 0 -1     获取数组中的全部数据
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> LRANGE list 0 1      获取指定数据:先进后出 最后一个数据他的下标为0
1) "three"
2) "two"
127.0.0.1:6379> 

127.0.0.1:6379> RPUSH list four              右添加数据
(integer) 4
127.0.0.1:6379> LRANGE list 0 -1             four添加到列表的右面        
1) "three"
2) "two"
3) "one"
4) "four"
127.0.0.1:6379> 

列表移除数据 

列表移除数据

127.0.0.1:6379> LRANGE list 0 -1
1) "three"
2) "two"
3) "one"
4) "four"
127.0.0.1:6379> keys *
1) "list"
127.0.0.1:6379> LRANGE list 0 -1
1) "three"
2) "two"
3) "one"
4) "four"
127.0.0.1:6379> LPOP list      移除左面第一个数据
"three"
127.0.0.1:6379> LRANGE list 0 -1
1) "two"
2) "one"
3) "four"
127.0.0.1:6379> RPOP list
"four"
127.0.0.1:6379> LRANGE list 0 -1   移除右面第一个数据
1) "two"
2) "one"

127.0.0.1:6379> LRANGE list 0 -1
1) "two"
2) "one"
127.0.0.1:6379> LINDEX list 0     //通过下标去获取指定值
"two"
127.0.0.1:6379> 

移除列表中的指定数据 


移除列表中的指定数据

127.0.0.1:6379> FLUSHALL
OK
127.0.0.1:6379> LPUSH list one
(integer) 1
127.0.0.1:6379> LPUSH list two
(integer) 2
127.0.0.1:6379> LPUSH list three
(integer) 3
127.0.0.1:6379> LPUSH list three
(integer) 4
127.0.0.1:6379> LRANGE list 0 -1
1) "three"
2) "three"
3) "two"
4) "one"
127.0.0.1:6379> LREM list 1 one       移除一个数据,值为one
(integer) 1
127.0.0.1:6379> LRANGE list 0 -1
1) "three"
2) "three"
3) "two"
127.0.0.1:6379> LREM list 2 three    移除两个数据,值为three
(integer) 2
127.0.0.1:6379> LRANGE list 0 -1
1) "two"
127.0.0.1:6379>  

截取列表中的数据 

127.0.0.1:6379> FLUSHALL
OK
127.0.0.1:6379> RPUSH list demo1
(integer) 1
127.0.0.1:6379> RPUSH list demo2
(integer) 2
127.0.0.1:6379> RPUSH list demo3
(integer) 3
127.0.0.1:6379> RPUSH list demo4
(integer) 4
127.0.0.1:6379> LRANGE list 0 -1       
1) "demo1"
2) "demo2"
3) "demo3"
4) "demo4"
127.0.0.1:6379> LTRIM list 1 2    截取列表中下标为1到2的数据
OK
127.0.0.1:6379> LRANGE list 0 -1
1) "demo2"
2) "demo3"
127.0.0.1:6379>  

组合命令rpoplpush:将列表中的一个数据弹出,并将弹出的这个数据值添加到另外的一个列表中


127.0.0.1:6379> LRANGE list 0 -1
1) "demo1"
2) "demo2"
3) "demo3"
127.0.0.1:6379> RPOPLPUSH list otherlist   将list中最右面的数据弹出,并将该数据添加到otherlist这个列表中
"demo3"
127.0.0.1:6379> LRANGE list 0 -1
1) "demo1"
2) "demo2"
127.0.0.1:6379> LRANGE otherlist 0 -1
1) "demo3"
127.0.0.1:6379> 

 将列表中的值进行覆盖

127.0.0.1:6379> FLUSHALL
OK
127.0.0.1:6379> EXISTS list    判断列表是否存在
(integer) 0
127.0.0.1:6379> lset list 0 value1           因为值不存在,所以并不能进行覆盖

                                                                覆盖只能覆盖已经存在的数据
(error) ERR no such key
127.0.0.1:6379> LPUSH list one
(integer) 1
127.0.0.1:6379> LRANGE list 0 -1
1) "one"
127.0.0.1:6379> lset list 0 value1           覆盖成功
OK
127.0.0.1:6379> LRANGE list 0 -1
1) "value1"

127.0.0.1:6379> lset list 1 value2      列表中只有一个数据,下标为0 则这里设置下标为1的                                                        的数据则报错,超出原本的范围
(error) ERR index out of range
127.0.0.1:6379> 

 插入数据

127.0.0.1:6379> FLUSHALL
OK
127.0.0.1:6379> RPUSH list oh
(integer) 1
127.0.0.1:6379> RPUSH list god
(integer) 2

127.0.0.1:6379> LRANGE list 0 -1
1) "oh"
2) "god"
127.0.0.1:6379> LINSERT list before god my      在list列表中在god之前插入一个my
(integer) 3
127.0.0.1:6379> LRANGE list 0 -1
1) "oh"
2) "my"
3) "god"
127.0.0.1:6379> LINSERT list after god !  在list列表中在god之后插入一个!
(integer) 4
127.0.0.1:6379> LRANGE list 0 -1
1) "oh"
2) "my"
3) "god"
4) "!"
127.0.0.1:6379> 

set集合

注意:set集合中的值是不能重复的 

127.0.0.1:6379> FLUSHALL    
OK
127.0.0.1:6379> sadd setlist bu            往set集合添加元素
(integer) 1
127.0.0.1:6379> sadd setlist xiang 
(integer) 1
127.0.0.1:6379> sadd setlist sui
(integer) 1
127.0.0.1:6379> SMEMBERS setlist          查看set集合中的元素
1) "sui"
2) "xiang"
3) "bu"
127.0.0.1:6379> SISMEMBER setlist sui     判断set集合中是否存在某个元素
(integer) 1                                                        存在则返回1,不存在则返回0
127.0.0.1:6379> SISMEMBER setlist xing
(integer) 0
127.0.0.1:6379> SCARD setlist                      获取set集合中的元素个数        
(integer) 3

在set集合中随机抽选集合中的一个元素

在set集合中随机抽选集合中的一个元素

127.0.0.1:6379> SRANDMEMBER setlist 
"bu"
127.0.0.1:6379> SRANDMEMBER setlist
"xiang" 

127.0.0.1:6379> SRANDMEMBER setlist 2      集合后面可以跟系数,表示随机抽出系数个参数
1) "sui"
2) "bu"

随机弹出集合中某一个元素

127.0.0.1:6379> SMEMBERS setlist
1) "sui"
2) "xiang"
3) "bu"
127.0.0.1:6379> SPOP setlist                 pop弹出,随机
"xiang"
127.0.0.1:6379> SMEMBERS setlist
1) "sui"
2) "bu"
127.0.0.1:6379>  

将集合中某一个指定的元素,移动到另外的一个集合中

127.0.0.1:6379> SMEMBERS setlist
1) "sui"
2) "bu"
127.0.0.1:6379> sadd setlist2 xing 
(integer) 1
127.0.0.1:6379> SMEMBERS setlist2
1) "xing"
127.0.0.1:6379> SMOVE setlist setlist2 sui             移动setlist中sui元素到setlist2这个集合中
(integer) 1
127.0.0.1:6379> SMEMBERS setlist
1) "bu"
127.0.0.1:6379> SMEMBERS setlist2
1) "sui"
2) "xing"
127.0.0.1:6379>  

求两个set集合中交集与并集:可以实现功能共同关注等等,将偶像的粉丝放在一个set集合中,把另外的一个偶像放在一个集合中,通过set集合中的方法可以实现共同关注这个功能

127.0.0.1:6379> FLUSHDB
OK
127.0.0.1:6379> sadd set1 a
(integer) 1
127.0.0.1:6379> sadd set1 b
(integer) 1
127.0.0.1:6379> sadd set1 c
(integer) 1
127.0.0.1:6379> sadd set2 c
(integer) 1
127.0.0.1:6379> sadd set2 d
(integer) 1
127.0.0.1:6379> sadd set2 e                      创建两个set集合,用这两个集合进行比较
(integer) 1
127.0.0.1:6379> SDIFF set1 set2            两个集合比较,以第一个集合为参照物,看第与二集合的区别
1) "a"
2) "b"
127.0.0.1:6379> SINTER set1 set2           求两个集合中的交集
1) "c"
127.0.0.1:6379> SUNION set1 set2            求两个集合的并集
1) "a"
2) "b"
3) "c"
4) "e"
5) "d"
127.0.0.1:6379>  

Hash(哈希)

可以把hash看成一个map集合,属性值为key- value

127.0.0.1:6379> FLUSHDB
OK
127.0.0.1:6379> HSET hash field1 ma     创建一个hash集合
(integer) 1
127.0.0.1:6379> HSET hash field2 yy  
(integer) 1
127.0.0.1:6379> hget hash field1             获取hash集合中的值
"ma"
127.0.0.1:6379> HGETALL hash            获取hash为所有的数据
1) "field1"
2) "ma"
3) "field2"
4) "yy"
127.0.0.1:6379> HMSET hash2 field1 bu field2 xiang field3 sui    批量增加数据
OK
127.0.0.1:6379> HGETALL hash2   数据格式:key - value
1) "field1"
2) "bu"
3) "field2"
4) "xiang"
5) "field3"
6) "sui"127.0.0.1:6379> HDEL hash2 field1      删除指定数据
(integer) 1
127.0.0.1:6379> HGETALL hash2
1) "field2"
2) "xiang"
3) "field3"
4) "sui"
127.0.0.1:6379> HLEN hash2                  //获取hash表中的长度
(integer) 2
127.0.0.1:6379> 

判断数据是否存在 

 127.0.0.1:6379> HGETALL hash2                
1) "field2"
2) "xiang"
3) "field3"
4) "sui"
127.0.0.1:6379> HEXISTS hash2 field2            判断数据在表中是否存在,存在返回值为1不存在返回值为0
(integer) 1
127.0.0.1:6379> HEXISTS hash2 field1
(integer) 0
127.0.0.1:6379> 

 只获取hash表中的key值,或者是values值

127.0.0.1:6379> HGETALL hash2
1) "field2"
2) "xiang"
3) "field3"
4) "sui"
127.0.0.1:6379> HKEYS hash2               获取表中所有的keys值
1) "field2"
2) "field3"
127.0.0.1:6379> HVALS hash2            获取表中所有的values值
1) "xiang" 
2) "sui"
127.0.0.1:6379> 

自动加一,自动减一

127.0.0.1:6379> HSET hash2 field1 4
(integer) 1
127.0.0.1:6379> HGETALL hash2
1) "field2"
2) "xiang"
3) "field3"
4) "sui"
5) "field1"
6) "4"
127.0.0.1:6379> HINCRBY hash2 field1 1          自动加一
(integer) 5
127.0.0.1:6379> HINCRBY hash2 field1 -1         自动加-1
(integer) 4
127.0.0.1:6379>  

对象存储

127.0.0.1:6379> HSET user:1 name buxiang
(integer) 1
127.0.0.1:6379> HGET user:1 name
"buxiang"
127.0.0.1:6379>  

zset:有序集合 

127.0.0.1:6379> FLUSHALL
OK
127.0.0.1:6379> zadd list1 1 one                         添加一个数据
(integer) 1
127.0.0.1:6379> zadd list1 2 two 3 three            添加多个数据
(integer) 2
127.0.0.1:6379> ZRANGE list1 0 -1                     获取全部数据,0到 -1表示全部
1) "one"
2) "two"
3) "three"
127.0.0.1:6379>  

 添加顺序进行排序

127.0.0.1:6379> FLUSHALL
OK
127.0.0.1:6379> zadd salary 2000 ma           添加用户数据     
(integer) 1
127.0.0.1:6379> zadd salary 5000 wang
(integer) 1
127.0.0.1:6379> zadd salary 500 li
(integer) 1
127.0.0.1:6379> ZRANGE salary 0 -1      查看salary中的数据
1) "li"
2) "ma"
3) "wang"
127.0.0.1:6379> ZRANGE salary 0 -1 withscores 
1) "li"
2) "500"
3) "ma"
4) "2000"
5) "wang"
6) "5000"                                                                        从小到大排序
127.0.0.1:6379> ZRANGEbyScore salary -inf +inf       排序顺序从负无穷到正无穷进行排序
1) "li"
2) "ma"
3) "wang"
127.0.0.1:6379> ZRANGEbyScore salary -inf +inf withscores     排序并显示score数据
1) "li"
2) "500"
3) "ma"
4) "2000"
5) "wang"
6) "5000"
127.0.0.1:6379> ZRANGEbyScore salary -inf 2500 withscores     排序从负无穷到2500之内的信息
1) "li"
2) "500"
3) "ma"
4) "2000"

127.0.0.1:6379> ZREVRANGE salary 0 -1       从大到小排序
1) "wang"
2) "ma"

移除数据

127.0.0.1:6379> ZRANGE salary 0 -1 
1) "li"
2) "ma"
3) "wang"
127.0.0.1:6379> ZREM salary li         移除表中的数据
(integer) 1
127.0.0.1:6379> ZRANGE salary 0 -1
1) "ma"
2) "wang"

127.0.0.1:6379> ZCARD salary   获取集合中的元素个数
(integer) 2

获取指定区间中的数据

127.0.0.1:6379> zadd myset 1 bu 2 xiang 3 sui 4 xing 5 de 6 meng   添加数据到表中
(integer) 6
127.0.0.1:6379> ZRAnge myset 0 -1             查看表中的数据
1) "bu"
2) "xiang"
3) "sui"
4) "xing"
5) "de"
6) "meng"
127.0.0.1:6379> ZRAnge myset 0 -1 withscores        将附带信息一起查看出来
 1) "bu"
 2) "1"
 3) "xiang"
 4) "2"
 5) "sui"
 6) "3"
 7) "xing"
 8) "4"
 9) "de"
10) "5"
11) "meng"
12) "6"
127.0.0.1:6379> ZCOUNT myset 1 4         获取1到4之间的数据个数
(integer) 4
127.0.0.1:6379>  

除了上面的命令之外,redis还拥有很多的命令,如果遇到不懂的,或者是想学习更多的知识可以到官方文档去学习

Commands | Redis


http://www.ppmy.cn/news/59827.html

相关文章

Filter 过滤器

Filter过滤器介绍 这里我们讲解Filter的执行流程,从下图可以大致了解到,当客户端发送请求的时候,会经过过滤器,然后才能到我们的servlet,当我们的servlet处理完请求之后,我们的response还是先经过过滤器才…

MySQL几种备份方式对比,你用对了吗?

各备份方法对比 备份数据的策略需要根据几种维度考虑 备份能承受最大丢失数据量 备份期间系统可以处于哪种情况(不可用,部分可用,完全可用) 数据恢复时长 需要恢复全量数据还是增量数据 备份数据的方法 逻辑备份:…

JavaWeb《CSS》

本笔记学习于Acwing平台 目录 1. 样式定义方式 2.1 行内样式表(inline style sheet) 2.2 内部样式表(internal style sheet) 2.3 外部样式表(external style sheet) 2. 选择器 2.1 标签选择器 2.2 …

真题详解(归纳法)-软件设计(六十七)

真题详解(关系模型)-软件设计(六十六)https://blog.csdn.net/ke1ying/article/details/130495791 1、2018上半年 将小阶向大阶对奇,尾数右移动 解析: 0.23 * 10的2次方 0.22 *10的3次方 第一步:0.023*10的3次方,…

第三十四章 Unity人形动画(上)

在我们DirectX课程中,我们讲过一个模型最少拥有网格和材质,可以没有动画。游戏场景中的静态物体就可以是这样的模型,例如花草树木,建筑物等等,他们通过MeshRenderer就可以渲染。对于一个带有动画的FBX文件,…

feign远程调用原理

目录 一、简介 二、调用流程分析 2.1 添加注解 2.2 Import(FeignClientsRegistrar.class), 2.3 代理创建流程 2.4 代理调用 一、简介 feign是springCloud全家桶中的远程调用组件,其底层主要依赖于Java的动态代理机制,然后基于http client…

【vue3.2 + ts + vite】使用 slot

vue3中使用slot会报错&#xff0c;需要用template封装一下。 1&#xff0c;基本使用方法 <slot name"button"> </slot><template #button><div>查看详情</div> </template>2&#xff0c;有参数传递&#xff0c;接收值使用方法…

【Python习题集1】Python 语言基础知识

python习题 一、实验内容二、实验总结 一、实验内容 1、运用输入输出函数编写程序&#xff0c;将华氏温度转换成摄氏温度。换算公式&#xff1a;C(F-32)*5/9,其中C为摄氏温度&#xff0c;F为华氏温度。 &#xff08;1&#xff09;源代码&#xff1a; ffloat(input(输入华氏温…