Redis常用五大数据类型简介

来源:互联网 发布:ecshop php 5.6 编辑:程序博客网 时间:2024/06/13 10:53

Redis 常用五大数据类型简介

一、Redis 的五大数据类型

1.1、String (字符串)

String 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 Key 对应一个 Value

String 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如 jpg 图片偏或者序列化的对象。

String 类型是 Redis 最基本的数据类型,一个 redis 中字符串 value 最多可以是 512M

1.2、Hash (哈希,类型 java 里的 Map)

Redis hash 是一个键值对集合

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

类似 Java 里面的 Map

1.3、List (列表)

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

它的底层实际是一个链表

1.4、Set (集合)

Redis 的 Set 是 String 类型的无序集合。它是通过 HashTable 实现的。

1.5、Zset (sorted set:有序集合)

Redis zset 和 set 一样也是 String 类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个 double 类型的分数

redis 正是通过分数来为集合中的成员进行从小到大的排序。zset 的成员是唯一的,但分数(score)却可以重复

二、获得 redis 常见数据类型操作命令

常见数据类型操作命令

三、Key 关键字

序号 命令 描述 1 DEL key 该命令用于在 key 存在时删除 key 2 DUMP key 序列化给定 key ,并返回被序列化的值 3 EXISTS key 检查给定 key 是否存在 4 EXPIRE key seconds 为给定 key 设置过期时间 5 EXPAREAT key timestamp EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置过期时间,不同在于 EXPIREAT 命令接受的事件参数是 UNIX 时间戳(unix timestamp) 6 PEXPIRE key milliseconds 设置 key 的过期时间亿以毫秒计 7 PEXPIREAT key milliseconds-timestamp 设置 key 过期时间的时间戳(unix timestamp)以毫秒计 8 KEYS pattern 查找所有符合给定模式(pattern) 的 key 9 MOVE key db 将当前数据库的 key 移动到给定的数据库 db 中 10 PERSIST key 移除 key 的过期时间,key 将持久保持 11 PTTL key 以毫秒为单位返回 key 的剩余的过期时间 12 TTL key 以秒为单位返回 key 的剩余的过期时间 13 RANDOMKEY 从当前数据库中随机返回一个 key 14 RENAME key newkey 修改 key 的名称 15 RENAMENX key newkey 近当 newkey 不存在时,将 key 改名为 newkey 16 TYPE key 返回 key 所存储的值的类型

案例

keys *

exists key 的名字,判断某个 key 是否存在

move key db —> 当前库就没有了,被移除了

expire key 秒钟 : 为给定的 key 设置过期时间

ttl key 查看还有多少秒过期,-1 表示永不过期,-2 表示已过期

type key 查看你的 key 是什么类型

四、String

常用

序号 命令 描述 1 SET key value 设置给定 key 的值 2 GET key 获取指定 key 的值 3 GETRANGE key start end 返回 key 中字符串值的子字符 4 GETSET key value 将给定 key 的值设为 value ,并返回 key 的旧值(old value) 5 GETBIT key offset 对 key 所储存的字符串值,获取指定偏移量上的位(bit) 6 MGET key1(key2) 获取所有(一个或多个)给定 key 的值 7 SETBIT key offset value 对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit) 8 SETEX key seconds value 将值 value 关联到 key,并将 key 的过期时间设为 seconds (以秒为单位) 9 SETNX key value 只有在 key 不存在时设置 key 的值 10 SETRANGE key offset value 用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始 11 STRLEN key 返回 key 所储存的字符串值的长度 12 MSET key value [key value …] 同时设置一个或多个 key-value 对 13 MSETNX key value [key value …] 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在 14 PSETEX key milliseconds value 这个命令和 SETEX 命令相似,但它以毫秒为单位设置 key 的生存时间,而不是像 SETEX 命令那样,以秒为单位 15 INCR key 将 key 中储存的数字值增一 16 INCRBY key increment 将 key 所储存的值加上给定的增量值(increment) 17 INCRBYFLOAT key increment 将 key 所储存的值加上给定的浮点增量值(increment) 18 DECR key 将 key 中储存的数字之减一 19 DECRBY key decrement key 所储存的值减去给定的增量值 (decrement) 20 APPEND key value 如果 key 已经存在并且是一个字符串,APPEND 命令将 value 追加到 key 原来的值的末尾

单值单value

案例

set/get/del/append/strlen

127.0.0.1:6379> set k1 v1OK127.0.0.1:6379> get k1"v1"127.0.0.1:6379> del k1(integer) 1127.0.0.1:6379> set k2 v2OK127.0.0.1:6379> append k2 12345(integer) 7127.0.0.1:6379> get k2"v212345"127.0.0.1:6379> strlen k2(integer) 7

Incr/decr/Incrby/decrby,一定要是数字才能进行加减

127.0.0.1:6379> set k1 3OK127.0.0.1:6379> set k2 v2OK127.0.0.1:6379> INCR k1(integer) 4127.0.0.1:6379> INCR k1(integer) 5127.0.0.1:6379> INCR k1(integer) 6127.0.0.1:6379> DECR k1(integer) 5127.0.0.1:6379> DECR k1(integer) 4127.0.0.1:6379> INCRBY k1 3(integer) 7127.0.0.1:6379> INCRBY k1 3(integer) 10127.0.0.1:6379> DECRBY k1 3(integer) 7127.0.0.1:6379> DECRBY k1 3(integer) 4127.0.0.1:6379> INCR k2(error) ERR value is not an integer or out of range

getrange/setrange

getrange : 获取指定区间范围内的值,类似 between……and 的关系

从零到负一表示全部

127.0.0.1:6379> set k1 abcd123OK127.0.0.1:6379> GETRANGE k1 0 -1"abcd123"127.0.0.1:6379> GETRANGE k1 0 2"abc"

setrange : 设置指定区间范围内的值,格式是 setrange key 值 具体值

127.0.0.1:6379> set k1 abcd1234OK127.0.0.1:6379> get k1"abcd1234"127.0.0.1:6379> SETRANGE k1 1 xxx(integer) 8127.0.0.1:6379> get k1"axxx1234"

setex(set with expire)键秒值/setnx(set if not exist)

127.0.0.1:6379> setex k1 10 v1OK127.0.0.1:6379> ttl k1(integer) 9127.0.0.1:6379> get k1"v1"127.0.0.1:6379> ttl k1(integer) -2127.0.0.1:6379> get k1(nil)127.0.0.1:6379> set k1 v1OK127.0.0.1:6379> get k1"v1"127.0.0.1:6379> setnx k1 v11(integer) 0127.0.0.1:6379> get k1"v1"127.0.0.1:6379> setnx k11 v11(integer) 1

mset/mget/msetnx

127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3OK127.0.0.1:6379> mget k1 k2 k3 1) "v1"2) "v2"3) "v3"127.0.0.1:6379> keys *1) "k3"2) "k1"3) "k2"127.0.0.1:6379> msetnx k3 v33 k4 v4(integer) 0127.0.0.1:6379> get k4(nil)127.0.0.1:6379> msetnx k4 v4 k5 v5(integer) 1127.0.0.1:6379> mget k4 k5 1) "v4"2) "v5"

getset

五、List

单值多 value

案例

lpush/rpush/lrange

127.0.0.1:6379> LPUSH list01 1 2 3 4 5(integer) 5127.0.0.1:6379> LRANGE list01 0 -11) "5"2) "4"3) "3"4) "2"5) "1"127.0.0.1:6379> RPUSH list02 1 2 3 4 5(integer) 5127.0.0.1:6379> LRANGE list02 0 -11) "1"2) "2"3) "3"4) "4"5) "5"

lpop/rpop

127.0.0.1:6379> lpop list01"5"127.0.0.1:6379> lpop list02"1"127.0.0.1:6379> rpop list01"1"127.0.0.1:6379> rpop list02"5"127.0.0.1:6379> lrange list01 0 -11) "4"2) "3"3) "2"

index,按照索引下标获得元素(从上到下)

127.0.0.1:6379> lrange list01 0 -11) "4"2) "3"3) "2"127.0.0.1:6379> lrange list02 0 -11) "2"2) "3"3) "4"127.0.0.1:6379> lindex list01 3(nil)127.0.0.1:6379> lindex list01 2"2"127.0.0.1:6379> lindex list02 2"4"

llen

127.0.0.1:6379> llen list01(integer) 3127.0.0.1:6379> llen list02(integer) 3

lrem key 删 N 个 value

127.0.0.1:6379> RPUSH list03 1 1 1 2 2 2 3 3 3 4 4 4 5 6 7(integer) 15127.0.0.1:6379> LREM list03 2 3(integer) 2127.0.0.1:6379> LRANGE list03 0 -1 1) "1" 2) "1" 3) "1" 4) "2" 5) "2" 6) "2" 7) "3" 8) "4" 9) "4"10) "4"11) "5"12) "6"13) "7"

ltrim key 开始 index 结束 index ,截取指定范围的值后再赋值给 key

127.0.0.1:6379> LPUSH list01 1 2 3 4 5 6 7 8 (integer) 8127.0.0.1:6379> LTRIM list01 0 4OK127.0.0.1:6379> LRANGE list01 0 -11) "8"2) "7"3) "6"4) "5"5) "4"

rpoplpush 源列表 目的列表

127.0.0.1:6379> lpush list01  1 2 3 4 5 6(integer) 6127.0.0.1:6379> rpush list02 7 8 9 10(integer) 4127.0.0.1:6379> lrange list01 0 -11) "6"2) "5"3) "4"4) "3"5) "2"6) "1"127.0.0.1:6379> lrange list02 0 -11) "7"2) "8"3) "9"4) "10"127.0.0.1:6379> rpoplpush list01 list02"1"127.0.0.1:6379> lrange list01 0 -11) "6"2) "5"3) "4"4) "3"5) "2"127.0.0.1:6379> lrange list02 0 -11) "1"2) "7"3) "8"4) "9"5) "10"

lset key index value

127.0.0.1:6379> lrange list01 0 -11) "6"2) "5"3) "4"4) "3"5) "2"127.0.0.1:6379> lset list01 2 xOK127.0.0.1:6379> lrange list01 0 -11) "6"2) "5"3) "x"4) "3"5) "2"

linsert key before/after 值1 值2

127.0.0.1:6379> lrange list01 0 -11) "6"2) "5"3) "x"4) "3"5) "2"127.0.0.1:6379> linsert list01 before x java(integer) 6127.0.0.1:6379> lrange list01 0 -11) "6"2) "5"3) "java"4) "x"5) "3"6) "2"127.0.0.1:6379> linsert list01 after x oracle(integer) 7127.0.0.1:6379> lrange list01 0 -11) "6"2) "5"3) "java"4) "x"5) "oracle"6) "3"7) "2"

性能总结

  • 它是一个字符串链表,left、right都可以插入添加;
  • 如果键不存在,创建新的链表;
  • 如果键已存在,新增内容;
  • 如果值全移除,对应的键也就消失了。
  • 链表的操作无论是头和尾效率都极高,但假如是对中间元素进行操作,效率就很惨淡了。

六、Set

单值多 value

sadd/smembers/sismember

127.0.0.1:6379> flushdbOK127.0.0.1:6379> dbsize(integer) 0127.0.0.1:6379> sadd set1 v1(integer) 1127.0.0.1:6379> sadd set1 v1(integer) 0127.0.0.1:6379> sadd set1 v2 v3 v3 v4 v5(integer) 4127.0.0.1:6379> smembers set11) "v1"2) "v2"3) "v4"4) "v3"5) "v5"127.0.0.1:6379> sismember set1 v1(integer) 1127.0.0.1:6379> sismember set1 x(integer) 0

scard,获取集合里面的元素个数

127.0.0.1:6379> scard set1(integer) 5

srem key value 删除集合中元素

127.0.0.1:6379> SMEMBERS set11) "v4"2) "v3"3) "v1"4) "v2"5) "v5"127.0.0.1:6379> SREM set1 v1(integer) 1127.0.0.1:6379> SMEMBERS set11) "v2"2) "v4"3) "v5"4) "v3"

srandmember key 某个整数(随机出几个数)

127.0.0.1:6379> flushdbOK127.0.0.1:6379> sadd set1 1 2 3 4 5 6 7(integer) 7127.0.0.1:6379> srandmember set1 31) "7"2) "2"3) "4"127.0.0.1:6379> srandmember set1 31) "5"2) "1"3) "2"127.0.0.1:6379> srandmember set1 31) "1"2) "4"3) "3"

spop key 随机出栈

127.0.0.1:6379> flushdbOK127.0.0.1:6379> sadd set01 1 2 3 4 5 6 7 8(integer) 8127.0.0.1:6379> smembers set011) "1"2) "2"3) "3"4) "4"5) "5"6) "6"7) "7"8) "8"127.0.0.1:6379> spop set01"8"127.0.0.1:6379> spop set01"1"

smove key1 key2 在 key1 里某个值 作用是将 key1 里的某个值赋给 key2

127.0.0.1:6379> flushdbOK127.0.0.1:6379> sadd set01 1  2 3(integer) 3127.0.0.1:6379> sadd set02 x y z(integer) 3127.0.0.1:6379> smove set01 set02 2(integer) 1127.0.0.1:6379> smembers set021) "x"2) "2"3) "y"4) "z"

数学集合类

差集:sdiff

交集:sinter

并集:sunion

127.0.0.1:6379> flushdbOK127.0.0.1:6379> sadd set01 1 2 3 4 5(integer) 5127.0.0.1:6379> sadd set02 1 2 3 a b(integer) 5127.0.0.1:6379> sdiff set01 set021) "4"2) "5"127.0.0.1:6379> sdiff set02 set011) "b"2) "a"127.0.0.1:6379> sinter set01 set021) "1"2) "2"3) "3"127.0.0.1:6379> sunion set01 set021) "5"2) "b"3) "a"4) "4"5) "2"6) "1"7) "3"

七、Hash

KV模式不变,但 V 是一个键值对

案例

hset/hget/hmset/hmget/hgetall/hdel

127.0.0.1:6379> flushdbOK127.0.0.1:6379> clear127.0.0.1:6379> hset user name z3(integer) 1127.0.0.1:6379> hget user name"z3"127.0.0.1:6379> hmset customer id 11 name li4 age 26OK127.0.0.1:6379> hmget customer id name age1) "11"2) "li4"3) "26"127.0.0.1:6379> hgetall customer1) "id"2) "11"3) "name"4) "li4"5) "age"6) "26"127.0.0.1:6379> hdel user name(integer) 1

hlen

127.0.0.1:6379> hlen user(integer) 0127.0.0.1:6379> hlen customer(integer) 3

hexists key 在 key 里面的某个值的 key

127.0.0.1:6379> hexists customer id(integer) 1127.0.0.1:6379> hexists customer email(integer) 0

hkeys/hvals

127.0.0.1:6379> hkeys customer1) "id"2) "name"3) "age"127.0.0.1:6379> hvals customer1) "11"2) "li4"3) "26"

hincrby/hincrbyfloat

127.0.0.1:6379> HINCRBY customer age 2(integer) 28127.0.0.1:6379> HINCRBY customer age 2(integer) 30127.0.0.1:6379> hset customer score 91.5(integer) 1127.0.0.1:6379> HINCRBYFLOAT customer score 0.5"92"127.0.0.1:6379> HINCRBYFLOAT customer score 0.5"92.5"

hsetnx

127.0.0.1:6379> hsetnx customer age 26(integer) 0127.0.0.1:6379> hsetnx customer email abc@126.com(integer) 1

八、Zset(sorted set)

在 set 基础上,加一个 socre 值

之前 set 是 k1 v1 v2 v3

现在 zset 是 k1 socre1 v1 socre2 v2

案例

zadd/zrange

127.0.0.1:6379> zadd zset01 60 v1 70 v2 80 v3 90 v4 100 v5(integer) 5127.0.0.1:6379> zrange zset01 0 -11) "v1"2) "v2"3) "v3"4) "v4"5) "v5"127.0.0.1:6379> zrange zset01 0 -1 withscores  1) "v1" 2) "60" 3) "v2" 4) "70" 5) "v3" 6) "80" 7) "v4" 8) "90" 9) "v5"10) "100"

zrangebyscore key 开始 score 结束 score

  • withscores
  • ( 不包含
  • Limit 作用是返回显示
127.0.0.1:6379> zadd zset01 60 v1 70 v2 80 v3 90 v4 100 v5(integer) 5127.0.0.1:6379> zrange zset01 0 -11) "v1"2) "v2"3) "v3"4) "v4"5) "v5"127.0.0.1:6379> zrange zset01 0 -1 withscores  1) "v1" 2) "60" 3) "v2" 4) "70" 5) "v3" 6) "80" 7) "v4" 8) "90" 9) "v5"10) "100"127.0.0.1:6379> zrangebyscore zset01 60 901) "v1"2) "v2"3) "v3"4) "v4"127.0.0.1:6379> zrangebyscore zset01 60 (901) "v1"2) "v2"3) "v3"127.0.0.1:6379> zrangebyscore zset01 (60 (901) "v2"2) "v3"127.0.0.1:6379> zrangebyscore zset01 60 901) "v1"2) "v2"3) "v3"4) "v4"127.0.0.1:6379> zrangebyscore zset01 60 90 limit 2 21) "v3"2) "v4"

zrem key 某 score 下对应的 value 值,作用是删除元素

127.0.0.1:6379> flushdbOK127.0.0.1:6379> ZADD zset01 60 v1 70 v2 80 v3 90 v4 100 v5(integer) 5127.0.0.1:6379> zrem zset01 v5(integer) 1127.0.0.1:6379> zrange zset01 0 -1 withscores1) "v1"2) "60"3) "v2"4) "70"5) "v3"6) "80"7) "v4"8) "90"

zcard/zconut key score 区间 /zrank key values 值,作用是获取下标值 /zscore key 对应值,获得分数

127.0.0.1:6379> flushdbOK127.0.0.1:6379> ZADD zset01 60 v1 70 v2 80 v3 90 v4 100 v5(integer) 5127.0.0.1:6379> ZCARD zset01(integer) 5127.0.0.1:6379> ZCOUNT zset01 60 80(integer) 3127.0.0.1:6379> ZRANK zset01 v4(integer) 3127.0.0.1:6379> ZSCORE zset01 v4"90"

zrevrank key values 值,作用是逆序获得下标值

127.0.0.1:6379> flushdbOK127.0.0.1:6379> ZADD zset01 60 v1 70 v2 80 v3 90 v4 100 v5(integer) 5127.0.0.1:6379> ZREVRANK zset01 v4(integer) 1

zrevrange

127.0.0.1:6379> flushdbOK127.0.0.1:6379> ZADD zset01 60 v1 70 v2 80 v3 90 v4 100 v5(integer) 5127.0.0.1:6379> ZREVRANGE zset01 0 -11) "v5"2) "v4"3) "v3"4) "v2"5) "v1"127.0.0.1:6379> ZRANGE zset01 0 -11) "v1"2) "v2"3) "v3"4) "v4"5) "v5"

zrevrangebyscore key

127.0.0.1:6379> flushdbOK127.0.0.1:6379> ZADD zset01 60 v1 70 v2 80 v3 90 v4 100 v5(integer) 5127.0.0.1:6379> ZREVRANGEBYSCORE zset01 90 601) "v4"2) "v3"3) "v2"4) "v1"
0 0
原创粉丝点击