String 是 redis 最基本的类型,你可以理解成与 Memcached 一模一样的类型,一个 Key 对应一个 Value
String 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如 jpg 图片偏或者序列化的对象。
String 类型是 Redis 最基本的数据类型,一个 redis 中字符串 value 最多可以是 512M
Redis hash 是一个键值对集合
Redis hash 是一个 String 类型的 field 和value 的映射表,hash 特别适合用于存储对象
类似 Java 里面的 Map
Redis 列表是简单的字符串列表,按照插入顺序排序小。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
它的底层实际是一个链表
Redis 的 Set 是 String 类型的无序集合。它是通过 HashTable 实现的。
Redis zset 和 set 一样也是 String 类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个 double 类型的分数
redis 正是通过分数来为集合中的成员进行从小到大的排序。zset 的成员是唯一的,但分数(score)却可以重复
常见数据类型操作命令
序号 | 命令 | 描述 |
---|---|---|
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 是什么类型
序号 | 命令 | 描述 |
---|---|---|
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 原来的值的末尾 |
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) 7Incr/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 rangegetrange/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) 1mset/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
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) 3lrem 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"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) 0scard,获取集合里面的元素个数
127.0.0.1:6379> scard set1(integer) 5srem 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"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) 1hlen
127.0.0.1:6379> hlen user(integer) 0127.0.0.1:6379> hlen customer(integer) 3hexists key 在 key 里面的某个值的 key
127.0.0.1:6379> hexists customer id(integer) 1127.0.0.1:6379> hexists customer email(integer) 0hkeys/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在 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) 1zrevrange
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"新闻热点
疑难解答