Redis那些事-数据类型与常用命令

2019-11-14  本文已影响0人  Dane_404

数据类型

STRING (字符串)
可以是保存字符串、整数和浮点数。
可以对字符串进行操作,比如增加字符或在求子串;如果是整数或者浮点数,可以实现计算,比如自增等。

LIST (列表)
它是一个链表,它的每一个节点都包含一个字符串。
Redis 支持从链农的两端插入或者弹出节点,或在通过偏移对它进行裁剪;还可以读取一个或者多个节点, 根据条件删除或者查找节点等。

SET (集合)
它是一个收集器,但是是无序的,在它里面每一个元素都是一个字符串,而且是独一无二,各不相同的。
可以新增、读取、删除单个元素 ; 检测 一个元索是否在集合中,计算它和其他集合的交集、并集和差集等; 随机从集合巾读取元素。

HASH (哈希散列表)
它类似于Java语言中的Map,是一个键值对应的无序列表。
可以增、删 、 查、改单个键值对,也可以获取所有的键值对。

ZSET (有序集合)
它是一个有序的集合,可以包含字符串、整数、浮点数、分值(score), 元素的排序是依据分值的大小来决定的。
可以增、删、查、改元素,根据分值的范围或者成员来获取对应的元素。

HyperLogLog (基数)
它的作用是计算重复的值,以确定存储的数量。
只提供基数的运算,不提供返回的功能。

比如数字集合{ l,2,5,7,9,1,5,9}的基数集合为{ 1,2,5,7,9}那么基数 (不重复元素)就是 5,基数的作用是评估大约需要准备多少个存储单元去存储数据,但是基数的算法一般会存在一定的误差(一般是可控的)。

Redis常见命令

key命令

key命令用于管理Redis的键,有11种,分别是del exists expire pexpire keys move persist pttl ttl randomkey rename type。

del、exists、rename、type
del删除key,exists判断是否存在key,rename就是盖key名,type查询key的数据类型。

127.0.0.1:6379> exists key1
(integer) 1
127.0.0.1:6379> del key1
(integer) 1
127.0.0.1:6379> exists ke2 user_2
(integer) 1
127.0.0.1:6379> del key2 user_2
(integer) 2
127.0.0.1:6379> rename user user1
OK
127.0.0.1:6379> get user
(nil)
127.0.0.1:6379> get user1
"dane"
127.0.0.1:6379> 
127.0.0.1:6379> type user1
string
127.0.0.1:6379> 

expire、pexpire、ttl、pttl、persist
expire、pexpire表示设置key的过期时间,expire单位是秒,pexpire单位是毫秒;ttl、pttl表示查询key还剩下多少时间过期,ttl对应expire,pttl对应pexpire;persist表示持久化key,设置的过期时间失效变成不过期。

127.0.0.1:6379> set user dane
OK
127.0.0.1:6379> expire user 20
(integer) 1
127.0.0.1:6379> ttl user
(integer) 17
127.0.0.1:6379> get user
(nil)
127.0.0.1:6379> set user dane
OK
127.0.0.1:6379> pexpire user 20000
(integer) 1
127.0.0.1:6379> pttl user
(integer) 15751
127.0.0.1:6379> get user
(nil)
127.0.0.1:6379> set user dane
OK
127.0.0.1:6379> expire user 60
(integer) 1
127.0.0.1:6379> persist user
(integer) 1
127.0.0.1:6379> get user
"dane"

keys
用查找Redis所有的key。

127.0.0.1:6379> keys *
1) "lua-key"
2) "user1"
3) "user_1"
4) "[lua-key]"
127.0.0.1:6379> keys us*
1) "user1"
2) "user_1"
127.0.0.1:6379> 

move
Redis也存在多个数据库,move用于移动key到指定数据库。

127.0.0.1:6379> select 0
OK
127.0.0.1:6379> keys *
1) "lua-key"
2) "user1"
3) "user_1"
4) "[lua-key]"
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
(empty list or set)
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> move user1 1
(integer) 1
127.0.0.1:6379> keys *
1) "lua-key"
2) "user_1"
3) "[lua-key]"
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
1) "user1"
127.0.0.1:6379[1]> 

string命令

用于操作string的命令,常见的有set mset get mget getrange getset setex setrange strlen psetex incr incrby incrbyfloat decr decrby append。

set mset get mget
表示添加和获取,m开头表示可以一次添加或取出多个。

127.0.0.1:6379> set user1 dane
OK
127.0.0.1:6379> mset user2 dane2 user3 dane3
OK
127.0.0.1:6379> keys u*
1) "user3"
2) "user1"
3) "user_1"
4) "user2"
127.0.0.1:6379> get user1
"dane"
127.0.0.1:6379> mget user2 user3
1) "dane2"
2) "dane3"
127.0.0.1:6379> 

setrange getrange strlen
setrange表示范围修改值,getrange表示范围获取值,strlen表示获取string的长度

127.0.0.1:6379> set user dane
OK
127.0.0.1:6379> setrange user 4 1
(integer) 5
127.0.0.1:6379> get user
"dane1"
127.0.0.1:6379> setrange user 3 1
(integer) 5
127.0.0.1:6379> get user
"dan11"
127.0.0.1:6379> getrange user 1 4
"an11"
127.0.0.1:6379> strlen user
(integer) 5

getset
表示先获取先前的值,在改变它。

127.0.0.1:6379> getset user dane
"dan11"
127.0.0.1:6379> get user
"dane"
127.0.0.1:6379> 

setex psetex
指定的 key 设置值及其过期时间,setex单位是秒,psetex单位是毫秒。

127.0.0.1:6379> setex user 1 dane
OK
127.0.0.1:6379> get user
(nil)
127.0.0.1:6379> psetex user 1000 dane
OK
127.0.0.1:6379> get user
(nil)
127.0.0.1:6379> 

incr incrby incrbyfloat
incr表示将 key 中储存的数字值+1,incrby表示加指定的值,incrbyfloat加指定的浮点型。

127.0.0.1:6379> set num 1
OK
127.0.0.1:6379> incr num
(integer) 2
127.0.0.1:6379> get num
"2"
127.0.0.1:6379> incrby num 2
(integer) 4
127.0.0.1:6379> get num
"4"
127.0.0.1:6379> incrbyfloat num 2.2
"6.2"
127.0.0.1:6379> get num
"6.2"

decr decrby
decr表示将 key 中储存的数字值-1,decrby表示加指定的值,注意只能是整数。

127.0.0.1:6379> set num 1
OK
127.0.0.1:6379> decr num
(integer) 0
127.0.0.1:6379> decr num 2
(error) ERR wrong number of arguments for 'decr' command
127.0.0.1:6379> get num
"0"
127.0.0.1:6379> decrby num 2
(integer) -2
127.0.0.1:6379> get num
"-2"

append
拼接字符串

127.0.0.1:6379> set user dane
OK
127.0.0.1:6379> append user 11
(integer) 6
127.0.0.1:6379> get user
"dane11"

hash 命令

操作hash的命令,常见命令:hdel hexists hget hset hmget hmset hkeys hvals hlen hgetall hincrby hincrbyfloat。

hset hget hmset hmget

127.0.0.1:6379> hset huser name dane
(integer) 1
127.0.0.1:6379> hget huser name
"dane"
127.0.0.1:6379> hmset huser age 18 sex 1
OK
127.0.0.1:6379> hmget huser age sex
1) "18"
2) "1"
127.0.0.1:6379> 

hdel hexists

127.0.0.1:6379> hexists huser sex
(integer) 1
127.0.0.1:6379> hdel huser sex
(integer) 1
127.0.0.1:6379> hget huser sex
(nil)

hkeys hvals hlen hgetall
分别表示获取所以键、获取所有值、获取hash长度、获取所有键值

127.0.0.1:6379> hkeys huser
1) "name"
2) "age"
127.0.0.1:6379> hvals huser
1) "dane"
2) "18"
127.0.0.1:6379> hlen huser
(integer) 2
127.0.0.1:6379> hgetall huser
1) "name"
2) "dane"
3) "age"
4) "18"

hincrby hincrbyfloat

127.0.0.1:6379> hincrby huser age 2
(integer) 20
127.0.0.1:6379> hget huser age
"20"
127.0.0.1:6379> hincrbyfloat huser age 2.2
"22.2"
127.0.0.1:6379> hget huser age
"22.2"

list命令

操作list的命令,常见命令:lindex llen linsert lpop lpush lpushx lrange lrem lset ltrim rpop rpush rpushx。

lpush lpushx rpush rpushx lindex
把list当做一根管子,lpushx表示往左边加一个,lpush表示往左边加多个, rpushx表示往右边加一个,rpush表示往右边加多个,注意的是,lpushx和 rpushx前提是该key存在,lindex表示list对应下标的值。

127.0.0.1:6379> lpush tests test1
(integer) 1
127.0.0.1:6379> del tests
(integer) 1
127.0.0.1:6379> lpush tests test1 test2
(integer) 2
127.0.0.1:6379> lindex tests 0
"test2"
127.0.0.1:6379> lpush tests test3
(integer) 3
127.0.0.1:6379> lindex tests 0
"test3"
127.0.0.1:6379> rpush tests test4 test5
(integer) 5
127.0.0.1:6379> lindex tests 4
"test5"
127.0.0.1:6379> rpushx tests test6
(integer) 6
127.0.0.1:6379> lindex tests 5
"test6"

llen lpop rpop
llen表示查询list长度,lpop表示从左边拿出一个,rpop则是从右边。

127.0.0.1:6379> llen tests
(integer) 6
127.0.0.1:6379> lpop tests
"test3"
127.0.0.1:6379> llen tests
(integer) 5
127.0.0.1:6379> rpop tests
"test6"
127.0.0.1:6379> llen tests
(integer) 4

linsert lset
linsert命令用于在列表的元素前或者后插入元素。当指定元素不存在于列表中时,不执行任何操作。

127.0.0.1:6379> lindex tests 1
"test1"
127.0.0.1:6379> linsert tests before test1 test8
(integer) 5
127.0.0.1:6379> lindex tests 1
"test8"
127.0.0.1:6379> lset tests 1 test9
OK
127.0.0.1:6379> lindex tests 1
"test9"

ltrim lrange
ltrim 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。lrange表示查询指定区间。

下标 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

127.0.0.1:6379> llen tests
(integer) 5
127.0.0.1:6379> ltrim tests 2 4
OK
127.0.0.1:6379> llen tests
(integer) 3
127.0.0.1:6379> lrange tests 0 -1
1) "test1"
2) "test4"
3) "test5"

lrem
根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素。

127.0.0.1:6379> lrem tests 0 test1
(integer) 1
127.0.0.1:6379>  lrange tests 0 -1
1) "test4"
2) "test5"

set命令

操作set的命令,常见命令:sadd scard sdiff sdiffstore sinter sinterstore sunion sunionstore sismember smembers smove spop srem srandmember sscan

sadd scard smembers sismember srem
scard表示查询set数量;
smembers表示set查询出所有元素;
sismember判断成员元素是否是集合的成员;
srem删除指定的元素

127.0.0.1:6379> sadd tests test1 test2
(integer) 2
127.0.0.1:6379> scard tests
(integer) 2
127.0.0.1:6379> smembers tests
1) "test1"
2) "test2"
127.0.0.1:6379> sismember tests test1
(integer) 1
127.0.0.1:6379> smembers tests
1) "test1"
2) "test2"
127.0.0.1:6379> srem tests test1
(integer) 1
127.0.0.1:6379> smembers tests
1) "test2"

sdiff sdiffstore sinter sinterstore sunion sunionstore
sdiff表示两个集合的差集,顺序不一样结果也不一样;
sdiffstore 命令将给定集合之间的差集存储在指定的集合中;
sinter表示两个集合的合集;
sinterstore表示两个集合的合集存储在指定的集合中;
sunion 表示给定集合的并集;
sunionstore 表示给定集合的并集存储在指定的集合中;

127.0.0.1:6379> sadd set1 1 2
(integer) 2
127.0.0.1:6379> sadd set2 2 4
(integer) 2
127.0.0.1:6379> sdiff set1 set2
1) "1"
127.0.0.1:6379> scard set1
(integer) 2
127.0.0.1:6379> scard set2
(integer) 2
127.0.0.1:6379> sdiff set2 set1
1) "4"
127.0.0.1:6379> sdiffstore set3 set1 set2
(integer) 1
127.0.0.1:6379> smembers set3
1) "1"
127.0.0.1:6379> sinter set1 set2
1) "2"
127.0.0.1:6379> sinterstore set4 set1 set2
(integer) 1
127.0.0.1:6379> smembers set4
1) "2"
127.0.0.1:6379> sunionstore set5 set1 set2
(integer) 3
127.0.0.1:6379> smembers set5
1) "1"
2) "2"
3) "4"

smove
移动一个集合的元素到另一个集合

127.0.0.1:6379> smove set1 set2 1
(integer) 1
127.0.0.1:6379> smembers set1
1) "2"
127.0.0.1:6379> smembers set2
1) "1"
2) "2"
3) "4"

spop srandmember
spop表示随机删除一个或多个元素,指定数量则多个,返回被删除的元素。
srandmember表示随机获取一个或多个元素,指定数量则多个。

127.0.0.1:6379> sadd set 1 2 3 4
(integer) 4
127.0.0.1:6379> spop set
"4"
127.0.0.1:6379> smembers set
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> spop set 2
1) "1"
2) "3"
127.0.0.1:6379> smembers set
1) "2"
127.0.0.1:6379> sadd set 1 3 4
(integer) 3
127.0.0.1:6379> srandmember set
"4"
127.0.0.1:6379> srandmember set 2
1) "3"
2) "4"

sscan
用于迭代集合中的元素。

127.0.0.1:6379> sscan set 0
1) "0"
2) 1) "1"
   2) "4"
127.0.0.1:6379> sscan set 0 match 4
1) "0"
2) 1) "4"

zset命令

常见命令:zadd zcard zcount zincrby zinterstore zrange zrangebyscore zrank zrem zremrangebyrank zremrangebyscore zrevrange zrevrangebyscore zrevrank zscore zunionstore zscan

zadd zcard zcount
zadd语法为ZADD KEY_NAME SCORE1 VALUE1.. SCOREN VALUEN,SCORE表示分数值,zset基于这个做排列。
zcard表示zset数量。
zcount表示计算有序集合中指定分数区间的成员数量。

127.0.0.1:6379> zadd zset 1 set1
(integer) 1
127.0.0.1:6379> zadd zset 1 set2
(integer) 1
127.0.0.1:6379> zadd zset 2 set3 3 set4
(integer) 2
127.0.0.1:6379> zrange zset 0 01
(error) ERR value is not an integer or out of range
127.0.0.1:6379> zrange zset 0 -1
1) "set1"
2) "set2"
3) "set3"
4) "set4"
127.0.0.1:6379> zcount zset 1 3
(integer) 4

zincrby
语法ZINCRBY key increment member,表示对指定成员的分数加上增量 increment,如果member不存在,则相当于ZADD key increment member。

127.0.0.1:6379> zadd zset 1 m1 2 m2 
(integer) 2
127.0.0.1:6379> zrange zset 0 -1
1) "m1"
2) "m2"
127.0.0.1:6379> zincrby zset 2 m1
"3"
127.0.0.1:6379> zrange zset 0 -1
1) "m2"
2) "m1"

zrange zrangebyscore zrank zscore
zrange和lrange一样;
zrangebyscore是用score来指定范围,
zrank返回成员的排名。
zscore返回成员的分数。

127.0.0.1:6379> zrange zset 0 -1
1) "m2"
2) "m1"
127.0.0.1:6379> zrangebyscore zset 1 2
1) "m2"
127.0.0.1:6379> zrank zset m2
(integer) 0
127.0.0.1:6379> zscore zset m1
"1"

zrem zremrangebyrank zremrangebyscore
zrem删除指定成员;
zremrangebyrank删除指定排名内的成员;
zremrangebyscore删除指定分数内的成员;

127.0.0.1:6379> zadd zset 1 s1 2 s2 3 s3 4 s4
(integer) 4
127.0.0.1:6379> zrange zset 0 -1 withscores
1) "s1"
2) "1"
3) "s2"
4) "2"
5) "s3"
6) "3"
7) "s4"
8) "4"
127.0.0.1:6379> zrem zset s1
(integer) 1
127.0.0.1:6379> zrange zset 0 -1 withscores
1) "s2"
2) "2"
3) "s3"
4) "3"
5) "s4"
6) "4"
127.0.0.1:6379> zremrangebyrank zset 0 0
(integer) 1
127.0.0.1:6379> zrange zset 0 -1 withscores
1) "s3"
2) "3"
3) "s4"
4) "4"
127.0.0.1:6379> zremrangebyscore zset 3 4
(integer) 2
127.0.0.1:6379> zrange zset 0 -1 withscores
(empty list or set)

zrevrange zrevrangebyscore zrevrank
zrevrank返回成员的倒序排名;
zrevrange倒序取出指定范围的成员;
zrevrangebyscore同理,倒序取出指定分数范围内的成员。

127.0.0.1:6379> zadd zset 1 s1 2 s2 3 s3 4 s4
(integer) 4
127.0.0.1:6379> zrevrank zset s1
(integer) 3
127.0.0.1:6379> zrevrange zset 0 -1
1) "s4"
2) "s3"
3) "s2"
4) "s1"
127.0.0.1:6379> zrevrangebyscore zset 3 1
1) "s3"
2) "s2"
3) "s1"

zinterstore zunionstore
zinterstore表示返回指定zset中的交集,并存储到指定新的zset中,其中的数量表示有几个集合。
zunionstore表示返回指定zset中的并集。

zadd zset1 1 s1 2 s2
(integer) 2
127.0.0.1:6379> zadd zset2 1 s1 2 s3
(integer) 2
127.0.0.1:6379> zinterstore sum 2 zset1 zset2
(integer) 1
127.0.0.1:6379> zrange sum 0 -1
1) "s1"
127.0.0.1:6379> zunionstore sum2 2 zset1 zset2
(integer) 3
127.0.0.1:6379> zrange sum2 0 -1
1) "s1"
2) "s2"
3) "s3"
上一篇下一篇

猜你喜欢

热点阅读