失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Redis 基本命令和五大基础数据类型

Redis 基本命令和五大基础数据类型

时间:2022-05-21 04:28:58

相关推荐

Redis 基本命令和五大基础数据类型

Redis 基础命令和数据类型

一、Redis的官方简介Introduction to Redis二、Redis基础命令三、五大基础类型1.String2.List3.Set4.Hash(哈希)5.zset(有序集合)引用来源

一、Redis的官方简介

Introduction to Redis

Learn about the Redis open source projectRedis is an open source (BSD licensed), in-memory data structure store used as a database, cache, message broker, and streaming engine. Redis provides data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes, and streams. Redis has built-in replication, Lua scripting, LRU eviction, transactions, and different levels of on-disk persistence, and provides high availability via Redis Sentinel and automatic partitioning with Redis Cluster.

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。

二、Redis基础命令

1.查看当前redis是否成功启动

ps -ef | grep redis

[root@localhost redis]# ps -ef | grep redisroot 33581 0 3月25 ? 00:04:19 ./bin/redis-server 127.0.0.1:6379root48716 75519 0 10:58 pts/1 00:00:00 grep --color=auto redis[root@localhost redis]#

2.打开redis的client

[root@localhost redis]# ./bin/redis-cli127.0.0.1:6379>

3.基础命令

127.0.0.1:6379> keys * //查看当前数据库中所有的key1) "age"2) "name"127.0.0.1:6379> flushall //清空所有的keyOK127.0.0.1:6379> keys * (empty array) //当前key都被清空127.0.0.1:6379> set name zhouquanOK127.0.0.1:6379> get name"zhouquan"127.0.0.1:6379> exists name //判断数据库是否存在key值(integer) 1 //1表示是,0表示否127.0.0.1:6379> exists age(integer) 0127.0.0.1:6379> move name 1 //移除key(integer) 1127.0.0.1:6379> keys *(empty array)127.0.0.1:6379> set name zhouquanOK127.0.0.1:6379> expire name 5 //设置过期时间(integer) 1127.0.0.1:6379> ttl name //查看key的剩余时间(integer) 1127.0.0.1:6379> ttl name(integer) -2127.0.0.1:6379> keys * //过期后数据库中key已经清空(empty array)127.0.0.1:6379>

4.官网查看命令文档

地址:https://redis.io/commands/

三、五大基础类型

String、List、Set、Hash、zset

1.String

127.0.0.1:6379> flushall OK127.0.0.1:6379> keys *(empty array)127.0.0.1:6379> exists k(integer) 0127.0.0.1:6379> set k1 v1OK127.0.0.1:6379> append k1 "kobe" //字符串追加(integer) 6127.0.0.1:6379> get k1 "v1kobe"127.0.0.1:6379> strlen k1 //字符串追加(integer) 6##################################################127.0.0.1:6379> set view 0OK127.0.0.1:6379> get view"0"127.0.0.1:6379> incr view //自增1(integer) 1127.0.0.1:6379> decr view //自减一(integer) 0127.0.0.1:6379> get view "0"127.0.0.1:6379> incrby view 5 //设置步长,指定增量为5(integer) 5127.0.0.1:6379> incrby view 5(integer) 10127.0.0.1:6379> Decrby view 5(integer) 5127.0.0.1:6379> ###################################################获取字符串范围127.0.0.1:6379> set name JeremyLinOK127.0.0.1:6379> getrange 0 5"Jeremy"127.0.0.1:6379> getrange name 0 -1"JeremyLin"127.0.0.1:6379> ###################################################替换127.0.0.1:6379> setrange name 0 test (integer) 9127.0.0.1:6379> get name "testmyLin"127.0.0.1:6379> ###################################################setex(set with expire) //设置过期时间#setnex( set if not exist) //不存在时则设置(在分布式锁中常常使用)127.0.0.1:6379> setex testex 30 v1 OK127.0.0.1:6379> get testex"v1"127.0.0.1:6379> ttl testex(integer) 13127.0.0.1:6379> ttl testex(integer) 10127.0.0.1:6379> ttl testex(integer) 7127.0.0.1:6379> ttl testex(integer) -2127.0.0.1:6379> get testex(nil)127.0.0.1:6379> setnx testex "hello"(integer) 1127.0.0.1:6379> keys *1) "testex"2) "name"127.0.0.1:6379> get testex"hello"127.0.0.1:6379> ###################################################mset //批量设置值#mget //批量获取值127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 //同时设置多个值OK127.0.0.1:6379> keys *1) "k2"2) "k3"3) "k1"127.0.0.1:6379> mget k1 k2 k3 //同时获取多个值1) "v1"2) "v2"3) "v3"127.0.0.1:6379> msetnx k1 v1 k4 v4 //msetnx是一个原子性的操作(integer) 0127.0.0.1:6379> get k4(nil)127.0.0.1:6379> ###################################################user:{id}:{field} //对象的方式存取值127.0.0.1:6379> mset user:1:name zhouquan user:1:age 25OK127.0.0.1:6379> mget user:1:name user:1:age1) "zhouquan"2) "25"127.0.0.1:6379> ##################################################127.0.0.1:6379> getset db mysql //如果不存在值,则返回nil(nil)127.0.0.1:6379> get db"mysql"127.0.0.1:6379> getset db redis"mysql"127.0.0.1:6379> get db //如果存在值,获取原来的值,并设置新的值"redis"127.0.0.1:6379>

String类型的使用场景:

计数器统计多单位的数量,例如浏览量相关粉丝数量或者其他

2.List

在list中,可以设计成栈、队列、阻塞队列

#lpush#rpush127.0.0.1:6379> lpush list one two three //将一个或多个值,从左边插入到列表的头部(integer) 3127.0.0.1:6379> Lrange list 0 -11) "three"2) "two"3) "one"127.0.0.1:6379> rpush list four //将一个或多个值,从右边插入到列表的尾部(integer) 4127.0.0.1:6379> Lrange list 0 -11) "three"2) "two"3) "one"127.0.0.1:6379> ###################################################lpop#rpop127.0.0.1:6379> lpop list #移除list的第一个元素"three"127.0.0.1:6379> rpop list #移除list的最后一个元素"four"127.0.0.1:6379> lrange list 0 -11) "two"2) "one"127.0.0.1:6379> ###################################################lindex 通过下表获取list中的值#llen 获取列表的长度127.0.0.1:6379> lrange list 0 -11) "four"2) "three"3) "two"4) "one"127.0.0.1:6379> lindex list 0"four"127.0.0.1:6379> lindex list 3"one"127.0.0.1:6379> llen list(integer) 4###################################################lrem 移除list集合中指定个数的value 精确匹配127.0.0.1:6379> lrange list 0 -11) "four"2) "four"3) "three"4) "two"5) "one"127.0.0.1:6379> lrem list 1 one(integer) 1127.0.0.1:6379> lrange list 0 -11) "four"2) "four"3) "three"4) "two"127.0.0.1:6379> lrem list 2 four(integer) 2127.0.0.1:6379> lrange list 0 -11) "three"2) "two"127.0.0.1:6379> ##################################################trim:list截取127.0.0.1:6379> lrange list 0 -11) "six"2) "five"3) "three"4) "two"127.0.0.1:6379> ltrim list 1 2OK127.0.0.1:6379> lrange list 0 -11) "five"2) "three"127.0.0.1:6379> ###################################################rpoplpush #移除列表中的最后一个元素到新的列表中127.0.0.1:6379> lrange list 0 -11) "seven"2) "six"3) "seven"4) "six"5) "five"127.0.0.1:6379> rpoplpush list newlist"five"127.0.0.1:6379> lrange list 0 -11) "seven"2) "six"3) "seven"4) "six"127.0.0.1:6379> lrange otherlist 0 -1(empty array)127.0.0.1:6379> lrange newlist 0 -11) "five"###################################################lset 将列表中指定下表的值替换为另一个值127.0.0.1:6379> lset list 0 otherOK127.0.0.1:6379> lrange list 0 -11) "other"2) "six"3) "seven"4) "six"###################################################linsert //将某个具体的value插入到指定的某个元素的前面或者后面127.0.0.1:6379> linsert list before seven insert1(integer) 5127.0.0.1:6379> lrange list 0 -11) "other"2) "six"3) "insert1"4) "seven"5) "six"127.0.0.1:6379>

小结:

本质上是一个链表,before node after ,left right都可以插入值如果移除掉列表中的所有元素,也表示不存在在两边插入或者改动值,效率最高!中间元素效率相对较低

3.Set

基础命令说明:

sadd key member1[menber2] 向集合中无序添加一个或多个成员scard key 获取集合的大小smembers key 返回指定key中的所有成员sismenbers key member 查询member元素是否为集合中的成员,1:是,0:否srandmember key [count] 随机返回集合中的元素,默认为1spop key [count] 随机移除并返回count个成员,默认为1smove source destination member 将source集合中的成员移动到destination集合srem key member1[member2…] 移除集合中的一个或多个元素sdiff key1 [key2…] 返回所有集合的差集sdiffstore destination key1[key2…] 将差集的结果保存到新的集合中sunionstore destination key1[key2…] 将并集的结果保存到新的集合中sinter key1 [key2…] 返回所有集合的交集sunion key1 [key2…]返回所有集合的并集sscan key [match pattern] [count count] 在数据量较大的情况下,部分遍历数据

···

127.0.0.1:6379> sadd myset hello world test test //sadd命令添加元素

(integer) 3

127.0.0.1:6379> smembers myset //查看指定set的所有值

“world”“hello”“test”

127.0.0.1:6379> sismember myset test //判断某一个值是不是在set集合中

(integer) 1

127.0.0.1:6379> sismember myset test1

(integer) 0

127.0.0.1:6379>

##################################################

127.0.0.1:6379> sadd myset hello world test test

(integer)

127.0.0.1:6379> smembers myset“world”“hello”“test”

127.0.0.1:6379> smembers myset test

(error) ERR wrong number of arguments for ‘smembers’ command

127.0.0.1:6379> sismember myset test

(integer) 1

127.0.0.1:6379> sismember myset test1

(integer) 0

127.0.0.1:6379>

##################################################

127.0.0.1:6379> scard myset //获取set集合中的元素个数

(integer) 3

##################################################

127.0.0.1:6379> srem myset hello //移除set集合中的指定元素

(integer) 1

127.0.0.1:6379> smembers myset“world”“test”

127.0.0.1:6379> srandmember myset 1 //随机抽取元素“test”

127.0.0.1:6379> srandmember myset 1“test”

127.0.0.1:6379> srandmember myset 1“world”

##################################################

127.0.0.1:6379> smove myset newset test #将一个指定的值,移动到另一个set集合

(integer) 1

127.0.0.1:6379> smembers newset“test”

##################################################

127.0.0.1:6379> smembers setx“m1”“m2”“m6”“m4”

127.0.0.1:6379> smembers sety“m5”“m2”“m6”

127.0.0.1:6379> sdiff setx sety //获取两个集合中的差集“m1”“m4”

127.0.0.1:6379> sinter setx sety //获取两个集合中的交集“m2”“m6”

127.0.0.1:6379> sunion setx sety //获取两个集合中的并集“m6”“m4”“m1”“m2”“m5”

···

总结:

1.Redis的Set是String类型的无序集合,具有集合的无序性和唯一性。

2.由于集合通过哈希表实现,因此增删查的时间复杂度都是O(1)。

3.集合的最大成员量为2^32 -1(2的32次方减一),即单个集合可存储40亿+数据。

4.Hash(哈希)

Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。

Set就是一种简化的Hash,只变动key,而value使用默认值填充。可以将一个Hash表作为一个对象进行存储,表中存放对象的信息。

HSET key field value 将哈希表 key 中的字段 field 的值设为 value

。重复设置同一个field会覆盖,返回0HMSET key field1 value1 [field2 value2…] 同时将多个 field-value (域-值)对设置到哈希表 key 中。HSETNX key field value 只有在字段 field 不存在时,设置哈希表字段的值。HEXISTS key field 查看哈希表 key 中,指定的字段是否存在。HGET key field value 获取存储在哈希表中指定字段的值HMGET key field1 [field2…] 获取所有给定字段的值HGETALL key 获取在哈希表key 的所有字段和值HKEYS key 获取哈希表key中所有的字段HLEN key 获取哈希表中字段的数量HVALS key 获取哈希表中所有值HDEL key field1 [field2…] 删除哈希表key中一个/多个field字段HINCRBY key field n 为哈希表 key 中的指定字段的整数值加上增量n,并返回增量后结果 一样只适用于整数型字段HINCRBYFLOAT key field n 为哈希表 key 中的指定字段的浮点数值加上增量 n。HSCAN key cursor [MATCH pattern] [COUNT count] 迭代哈希表中的键值对。

127.0.0.1:6379> hset stu name liqi //将stu哈希表作为一个对象,设置name(integer) 1127.0.0.1:6379> hset stu name dazhuang //重复设置field进行覆盖,且返回0(integer) 0127.0.0.1:6379> hget stu name"dazhuang" //已然被修改127.0.0.1:6379> hset stu age 30(integer) 1127.0.0.1:6379> hmset stu sex 1 tel 5126541254 birth 1996 //批量设置OK127.0.0.1:6379> hsetnx stu name liqi //field已存在,设置失败(integer) 0127.0.0.1:6379> hsetnx stu email liqi@ //field不存在,设置成功(integer) 1127.0.0.1:6379> ##################################################127.0.0.1:6379> hexists stu name //判断key中是否存在field(integer) 1127.0.0.1:6379> hexists stu test (integer) 0127.0.0.1:6379> ##################################################127.0.0.1:6379> hget stu name //获取key中指定的字段值"dazhuang"127.0.0.1:6379> hmget stu name age tel email //获取key中多个字段值1) "dazhuang"2) "30"3) "5126541254"4) "liqi@"127.0.0.1:6379> hgetall stu //获取key中全部的key-value1) "name"2) "dazhuang"3) "age"4) "30"5) "sex"6) "1"7) "tel"8) "5126541254"9) "birth"10) "1996"11) "email"12) "liqi@"127.0.0.1:6379> ##################################################127.0.0.1:6379> hkeys stu //获取key中所有的field1) "name"2) "age"3) "sex"4) "tel"5) "birth"6) "email"127.0.0.1:6379> hlen stu //获取key的长度(integer) 6127.0.0.1:6379> hvals stu //获取所有的value值1) "dazhuang"2) "30"3) "1"4) "5126541254"5) "1996"6) "liqi@"127.0.0.1:6379> ##################################################127.0.0.1:6379> hincrby stu age 1 //自增1(integer) 32127.0.0.1:6379> hincrby stu age 1(integer) 33127.0.0.1:6379> hincrbyfloat stu weight 0.5 //自增0.5 需要注意integer类型的数据不能自增float"2.5"127.0.0.1:6379> hincrbyfloat stu weight 0.5"3"127.0.0.1:6379> hkeys stu1) "name"2) "age"3) "sex"4) "tel"5) "birth"6) "email"7) "weight"127.0.0.1:6379> hdel stu sex //移除指定key中的field(integer) 1127.0.0.1:6379> hkeys stu 1) "name"2) "age"3) "tel"4) "birth"5) "email"6) "weight"

小结:

Hash变更的数据user name age,尤其是用户信息之类的,经常变动的信息!Hash更适合于对象的存储,Sring更加适合字符串存储!

5.zset(有序集合)

相对于set集合来说,zset集合的每一个元素都会关联一个double类型的分数(score),有些类似于es数据库中的score字段,作为一个权重值进行排序

ZADD key score member1 [score2 member2] 向有序集合添加一个或多个成员,或者更新已存在成员的分数ZCARD key 获取有序集合的成员数ZCOUNT key min max 计算在有序集合中指定区间score的成员数ZINCRBY key n member 有序集合中对指定成员的分数加上增量 nZSCORE key member 返回有序集中,成员的分数值ZRANK key member 返回有序集合中指定成员的索引ZRANGE key start end 通过索引区间返回有序集合成指定区间内的成员ZRANGEBYLEX key min max 通过字典区间返回有序集合的成员ZRANGEBYSCORE key min max 通过分数返回有序集合指定区间内的成员=-inf 和 +inf分别表示最小最大值,只支持开区间()==ZLEXCOUNT key min max 在有序集合中计算指定字典区间内成员数量ZREM key member1 [member2…] 移除有序集合中一个/多个成员ZREMRANGEBYLEX key min max 移除有序集合中给定的字典区间的所有成员ZREMRANGEBYRANK key start stop 移除有序集合中给定的排名区间的所有成员ZREMRANGEBYSCORE key min max 移除有序集合中给定的分数区间的所有成员ZREVRANGE key start end 返回有序集中指定区间内的成员,通过索引,分数从高到底ZREVRANGEBYSCORRE key max min 返回有序集中指定分数区间内的成员,分数从高到低排序ZREVRANGEBYLEX key max min 返回有序集中指定字典区间内的成员,按字典顺序倒序ZREVRANK key member 返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序ZINTERSTORE destination numkeys key1 [key2 …] 计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中,numkeys:表示参与运算的集合数,将score相加作为结果的scoreZUNIONSTORE destination numkeys key1 [key2…] 计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中ZSCAN key cursor [MATCH pattern] [COUNT count] 迭代有序集合中的元素(包括元素成员和元素分值)

···

127.0.0.1:6379> zadd myzset 1 m1 2 m2 3 m3 4 m4 //添加元素

(integer) 4

127.0.0.1:6379> zcard myzset //查看zset集合中的成员个数

(integer) 4

127.0.0.1:6379> zcount myzset 0 2 //获取指定索引下的元素个数

(integer) 2

127.0.0.1:6379> zcount myzset 0 3

(integer) 3

127.0.0.1:6379> zcount myzset 0 5

(integer) 4

127.0.0.1:6379> zincrby myzset 5 m1 //自增5

“6”

127.0.0.1:6379> zscore myzset m1 //获取指定key对应的score

“6”

127.0.0.1:6379> zrank myzset m1 //获取指定key对应的字典排序

(integer) 3

127.0.0.1:6379> zrank myzset m2

(integer) 0

127.0.0.1:6379> zrange myzset 0 -1 //获取zset集合中所有的key元素

“m2”“m3”“m4”

##################################################

127.0.0.1:6379> zrangebylex myzset - + //通过字典区间返回有序集合的成员“m2”“m3”“m4”“m1”

127.0.0.1:6379> zrangebylex myzset - + limit 0 2 //分页“m2”“m3”

127.0.0.1:6379> zrangebylex myzset - + limit 1 2“m3”“m4”

127.0.0.1:6379> zrangebylex myzset (- [m4 //通过字典区间返回有序集合的成员“m2”“m3”“m4”“m1”

127.0.0.1:6379> zrangebylex myzset (- [m3“m2”“m3”

127.0.0.1:6379> zrangebylex myzset (- [m1

(empty array)

##################################################

127.0.0.1:6379> zrangebyscore myzset 1 10 //获取指定score的成员key“m2”“m3”“m4”“m1”

127.0.0.1:6379> zlexcount myzset - + //在有序集合中计算指定字典区间内成员数量

(integer) 4

127.0.0.1:6379> ZREM testset abc //移除成员abc

(integer) 1

127.0.0.1:6379> ZREMRANGEBYLEX myzset [m1 [m4 //移除字典区间[apple,java]中的所有成员

(integer) 3

127.0.0.1:6379> ZREMRANGEBYRANK myzset 0 1 // 移除排名0~1的所有成员

(integer) 2

127.0.0.1:6379> ZREMRANGEBYSCORE myzset 0 3 // 移除score在 [0,3]的成员

(integer) 2

127.0.0.1:6379> zrem myzset m1 //移除指定key

(integer) 1

127.0.0.1:6379> zrevrange myzset 0 3 //返回排序结果的 索引的0-3

“m4”“m3”“m2”

127.0.0.1:6379> zrevrangebyscore myzset 6 2 // 按score递减顺序 返回集合中分数在[2,6]之间的成员“m4”“m3”“m2”

127.0.0.1:6379>

##################################################

127.0.0.1:6379> zadd mathscore 90 xm 95 xh 87 xg

(integer) 3

127.0.0.1:6379> zadd engscore 74 xm 85 xh 78 xg

(integer) 3

127.0.0.1:6379> zinterstore sumscore 2 mathscore engscore //将两个集合合并到指定集合

(integer) 3

127.0.0.1:6379> zrange sumscore 0 -1 withscores //根据key对两个score求和“xm”“164”“xg”“165”“xh”“180”

127.0.0.1:6379> zunionstore lowscore 2 matchscore engscore aggregate min //求两个集合并集的最小值并存储到lowscore

(integer) 3

127.0.0.1:6379> zrange lowscore 0 -1 withscores //查看集合中的排序结果“xm”“74”“xg”“78”“xh”“85”

127.0.0.1:6379>

···

小结:set排序 存储班级成绩表 工资表排序!普通消息,1.重要消息 2.带权重进行判断排行榜应用实现,取Top N测试

引用来源

本文参考:/kylinxxx/p/13770063.html,基本上都是自己上手后写的,基于b站up主“狂神说”

如果觉得《Redis 基本命令和五大基础数据类型》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。