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 关键字
案例
keys *
exists key 的名字,判断某个 key 是否存在
move key db —> 当前库就没有了,被移除了
expire key 秒钟 : 为给定的 key 设置过期时间
ttl key 查看还有多少秒过期,-1 表示永不过期,-2 表示已过期
type key 查看你的 key 是什么类型
四、String
常用
单值单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"
- Redis常用五大数据类型简介
- Redis 五大常用数据类型
- Redis五大数据类型
- Redis五大数据类型
- Redis入门之五大数据类型及常用操作
- Redis的五大数据类型
- (五)redis常用数据类型 Set
- redis 五大数据类型简单介绍
- redis五大数据类型的基本操作
- Redis五大数据类型(5+1)
- 4、redis的五大数据类型
- Redis大总结之一:Redis 五大数据类型及操作
- redis专题-3.Redis五大基本数据类型
- Redis 讲解系列之 Redis的五大数据类型
- 跟我学REDIS-REDIS(五)----常用数据类型之SortedSet
- Redis五大数据类型之无序集合set
- Redis-HelloWorld与五大基本数据类型(笔记)
- 一头坑进Redis之五大数据类型
- Redis事务
- Redis持久化
- Redis配置文件
- nginx和apache的区别
- C++中运算符重载的方法
- Redis常用五大数据类型简介
- 【django5】Forms模块
- Redis启动后基础知识
- codeforces 600 E. Lomsat gelral (dsu on the tree)
- 三大思维导图软件比较
- Zookeeper--Zookeeper是什么
- SQL数据库基本操作语句
- Leetcode 2
- 定时器中断实验