Redis数据类型_String
简介
String是Redis最基本的类型,一个key对应一个value。String是二进制安全的,意味着String可以包含 任何数据,比如序列化对象或者一张图片。String最多可以放512M的数据。
常用命令
set
用于设置给定 key 的值。如果 key 已经存储其他值, set 就重写旧值,且无视类型。
语法格式:
set key value
示例:
127.0.0.1:6379> set k1 v1
OK
get
用于获取指定 key 的值。如果 key 不存在,返回 nil 。
语法格式:
get key
示例:
127.0.0.1:6379> get k1
"v1"
append
将给定的value追加到key原值末尾。
语法格式:
append key value
示例:
127.0.0.1:6379> APPEND k1 k1
(integer) 4
127.0.0.1:6379> APPEND k1 k2
(integer) 6
注意:
- 如果 key 已经存在并且是一个字符串, append 命令将 value 追加到 key 原来的值的末尾。
- 如果 key 不存在, append 就简单地将给定 key 设为 value ,就像执行 set key value 一 样。
strlen
获取指定 key 所储存的字符串值的长度。当 key 储存的不是字符串值时,返回一个错误。
语法格式:
strlen key
示例:
127.0.0.1:6379> strlen k1
(integer) 6
setex
给指定的 key 设置值及time 秒的过期时间。如果 key 已经存在, setex命令将会替换旧的值,并设置过 期时间。
语法格式:
setex key time value
示例:
#向Redis中设置一个k1的键值对并且10秒后过期
127.0.0.1:6379> setex k1 10 v1
OK
setnx
只有在key不存在时设置key的值
语法格式:
setnx key value
示例:
127.0.0.1:6379> setnx k1 v1
(integer) 0
127.0.0.1:6379> setnx k4 v4
(integer) 1
getrange
获取指定区间范围内的值,类似between........and 的关系
语法格式:
getrange key start end
示例:
127.0.0.1:6379> set k5 abcd123xxx
OK
127.0.0.1:6379> getrange k5 2 4
"cd1"
setrange
获取指定区间范围内的值,类似between........and 的关系
语法结构:
setrange key offset value
示例:
127.0.0.1:6379> set k6 abcd1234
OK
127.0.0.1:6379> setrange k6 1 xxx
(integer) 8
127.0.0.1:6379> get k6
"axxx1234"
incr
将 key 中储存的数字值增一。
语法格式:
incr key
示例:
#因为Redis中不存在k1,所以先初始化为0,再递增,值为1
127.0.0.1:6379> incr k1
(integer) 1
# incr k1 存在k1,递增后k1的值为2
127.0.0.1:6379> incr k1
(integer) 2
# 如果value不是数字就会报错
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> INCR k2
(error) ERR value is not an integer or out of range
注意:
如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 incr 操作。
如字符串类型的值不能表示为数字、或者是其他类型,那么返回一个错误。
decr
将 key 中储存的数字值减一。
语法格式:
decr key
示例:
127.0.0.1:6379> decr k1
(integer) 1
127.0.0.1:6379> decr k1
(integer) 0
127.0.0.1:6379> decr k1
(integer) -1
127.0.0.1:6379> decr k1
(integer) -2
#如果
set k2 v2
decr k2 因为k2不为数值,Redis返回一个错误
注意:
如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 decr 操作。
如字符串类型的值不能表示为数字、或者是其他类型,那么返回一个错误。
incrby/decrby key step
将key存储的数字值按照step进行增减。
127.0.0.1:6379> incrby k1 10
(integer) 20
注意:
如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 incrby/decrby 命令。
如字符串类型的值不能表示为数字、或者是其他类型,那么返回一个错误。
mset
同时设置一个或多个 key-value 。
语法格式:
mset key1 value1 key2 value2
示例:
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
OK
mget
返回所有(一个或多个)给定 key 的值。
语法格式:
mget key1 key2
示例:
127.0.0.1:6379> mget k1 k2 k3
1) "v1"
2) "v2"
3) "v3"
注意:
如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil 。
getset
将给定key值设为value,并返回key的旧值(old value),简单一句话(先get然后立即set)。
语法格式:
getset key value
示例:
127.0.0.1:6379> getset k1 wcc
"v1"
127.0.0.1:6379> get k1
"wcc"
使用场景
- value 除了是字符串以外还可以是数字。
- 计数器
- 统计多单位的数量
- 粉丝数
- 对象缓存存储
- 分布式锁
实时学习反馈
1.Redis技术String数据类型中如何设置给定 key 的值。
A get
B append
C set
D mget
2. Redis技术String数据类型中如何只有在key不存在时设置key的值。
A get
B append
C setnx
D mget
Redis数据类型_List
简介
List是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右 边)。底层是一个双向链表,对两段操作性能极高,通过索引操作中间的节点性能较差。
一个List最多可以包含 $2^{32}-1$个元素 ( 每个列表超过40亿个元素)。
常用命令
lpush/rpush
从左边(头部)/右边(尾部)插入一个或多个值。
语法结构:
lpush/rpush key1 value1 value2 value3……
示例:
#从左边放入v1 v2 v3
127.0.0.1:6379> lpush k1 v1 v2 v3
(integer) 3
#从右边放入v4 v5 v6
127.0.0.1:6379> rpush k1 v4 v5 v6
(integer) 6
lrange
返回key列表中的start和end之间的元素(包含start和end)。 其中 0 表示列表的第一个元素,-1表示 最后一个元素。
语法结构:
lrange key start end
示例:
#取出列表里前3个值,结果为v3 v2 v1
127.0.0.1:6379> lrange k1 0 2
#取出列表里全部值,结果为v3 v2 v1 v4 v5 v6
127.0.0.1:6379> lrange k1 0 -1
lpop/rpop
移除并返回第一个值或最后一个值。
语法格式:
lpop/rpop key
示例:
lpop k1 从列表中删除v3,并返回,当前列表全部值v2 v1 v4 v5 v6
rpop k1 从列表中删除v6,并返回,当前列表全部值v2 v1 v4 v5
注意: 值在键在,值光键亡。
lindex
获取列表index位置的值(从左开始)。
语法结构:
lindex key index
示例:
lindex k1 0
llen
获取列表长度。
语法结构:
llen key
示例:
127.0.0.1:6379> llen k1
(integer) 6
lrem
从左边开始删除与value相同的count个元素。
语法结构:
lrem key count value
示例:
#从左边开始删除k1列表中2个v1元素
lrem k1 2 v1
linsert
在列表中value值的前边/后边插入一个new value值(从左开始)。
语法结构:
linsert key before/after value newvalue
示例:
linsert k1 before v1 v5 在v1前面插入一个v5
lset
将索引为index的值设置为value
语法结构:
lset key index value
示例:
lset key index value
使用场景
- 消息队列
- 排行榜
- 最新列表
实时学习反馈
1. Redis技术List数据类型中如何插入一个或多个值。
A lpush/rpush
B llen
C lset
D lrem
2. Redis技术List数据类型中如何移除并返回第一个值或者最后一个值。
A lpush/rpush
B llen
C lset
D lpop/rpop
Redis数据类型_Set
简介
与List类似是一个列表功能,但Set是自动排重的,当需要存储一个列表数据,又不希望出现重复数据 时,Set是一个很好的选择。
Set是String类型的无序集合,它底层其实是一个value为null的hash表,所以添加、删除、查找的时间 复杂度都是O(1)。
常用命令
sadd
将一个或多个元素添加到集合key中,已经存在的元素将被忽略。
语法结构:
sadd key value1 value2……
示例:
#向集合中添加值,最终只有v1 v2 v3 v4 v5 v6
127.0.0.1:6379> sadd k1 v1 v2 v2 v3 v4 v5 v6
smembers
取出该集合的所有元素。
语法结构:
smembers key
示例:
127.0.0.1:6379> smembers k1
sismember
判断集合key中是否含有value元素,如有返回1,否则返回0。
语法结构:
sismember key value
示例:
sismember k1 v1
scard
返回该集合的元素个数。
语法结构:
scard key
示例:
scard k1
srem
删除集合中的一个或多个成员元素,不存在的成员元素会被忽略。
语法结构:
srem key value1 value2……
示例:
# 删除v1 v2
srem k1 v1 v2
spop
随机删除集合中一个元素并返回该元素。
语法结构:
spop key
示例:
spop k1 随机删除一个元素,并返回
srandmember
随机取出集合中count个元素,但不会删除。
语法结构:
srandmember key count
示例:
#随机取出集合中的2个元素
srandmember k1 2
smove
将value元素从sourcekey集合移动到destinationkey集合中。
语法结构:
smove sourcekey destinationkey value
示例:
smove k1 k2 v5 将元素v5从集合k1中移动到集合k2
注意: 如果 sourcekey集合不存在或不包含指定的 value元素,则 smove 命令不执行任何操作,仅返回 0 。
sinter
返回两个集合的交集元素。
语法结构:
sinter key1 key2
示例:
sinter key1 key2
sunion
返回两个集合的并集元素。
语法结构:
sunion key1 key2
示例:
sunion k1 k2
sdiff
返回两个集合的差集元素(key1中的,不包含key2)
语法结构:
sdiff key1 key2
示例:
sdiff k1 k2
使用场景
- 黑白名单
- 随机展示
- 好友
- 关注人
- 粉丝
- 感兴趣的人集合
实时学习反馈
1. Redis技术Set数据类型中将一个或多个元素添加到集合key中。
A spop
B sinter
C sdiff
D sadd
2. Redis技术Set数据类型中如何取出该集合的所有元素。
A spop
B smembers
C sdiff
D sadd
Redis数据类型_Hash
简介
Hash是一个键值对的集合。Hash 是一个 String 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。
常用命令
hset
给key集合中的field赋值value。
语法结构:
hset key field value
示例:
127.0.0.1:6379> hset user name xiaoton (integer) 1 127.0.0.1:6379> hset user age 3 (integer) 1
hget
从key哈希中,取出field字段的值。
语法结构:
hget key field
示例:
127.0.0.1:6379> hget user name "xiaoton"
hmset
批量设置哈希的字段及值。
语法结构:
hmset key field1 value1 field2 value2……
示例:
127.0.0.1:6379> hmset user1 name xiaoton age 15 OK
hexists
判断指定key中是否存在field
语法结构:
hexists key field
示例:
127.0.0.1:6379> hexists user1 name (integer) 1 127.0.0.1:6379> hexists user1 xxx (integer) 0
hkeys
获取该哈希中所有的field。
语法结构:
hkeys key
示例:
127.0.0.1:6379> hkeys user1 1) "name" 2) "age"
hvals key
获取该哈希中所有的value。
语法结构:
hvals key
示例:
127.0.0.1:6379> hvals user1 1) "xiaoton" 2) "15"
hincrby
为哈希表key中的field字段的值加上增量increment。
语法结构:
hincrby key field increment
示例:
127.0.0.1:6379> hincrby user1 age 10 (integer) 25
hdel
删除哈希表 key 中的一个或多个指定字段,不存在的字段将被忽略。
语法结构:
hdel key field1 field2……
示例:
127.0.0.1:6379> hdel user1 age (integer) 1
hsetnx
给key哈希表中不存在的的字段赋值 。
语法结构:
hsetnx key field value
示例:
127.0.0.1:6379> hsetnx user1 age 10 (integer) 1
使用场景
1、购物车
2、存储对象
实时学习反馈
1. Redis技术Hash数据类型中如何给key集合中的field赋值value。
A hdel
B hsetnx
C hexists
D hset
2. Redis技术Hash数据类型中如何从key哈希中,取出field字段的值。
A hdel
B hsetnx
C hexists
D hget
Redis数据类型_Zset
简介
Zset与Set非常相似,是一个没有重复元素的String集合。不同之处是Zset的每个元素都关联了一个分数 (score),这个分数被用来按照从低分到高分的方式排序集合中的元素。集合的元素是唯一的,但分数可以重复。
常用命令
zadd
将一个或多个元素(value)及分数(score)加入到有序集key中。
语法结构:
zadd key score1 value1 score2 value2……
示例:
zadd k1 100 java 200 c++ 300 python 400 php
zrange
返回key集合中的索引start和索引end之间的元素(包含start和end)。
语法结构:
zrange key start end [withscores]
示例:
zrange k1 0 -1 返回集合中所有元素 zrange k1 0 -1 withscores 返回集合中所有元素,并携带元素分数
zrangebyscore
返回key集合中的分数minscore 和分数maxscore 之间的元素(包含minscore 和maxscore )。其中元素的位置按分数值递增(从小到大)来排序。
语法结构:
zrangebyscore key minscore maxscore [withscores]
示例:
zrangebyscore k1 200 400 返回200-400分之间的元素递增排序
zincrby
为元素value的score加上increment的值。
语法结构:
zincrby key increment value
示例:
zincrby k1 50 java 给java元素加上50分
zrem
删除该集合下value的元素。
语法结构:
zrem k1 php 删除php
zcount
统计该集合在minscore 到maxscore分数区间中元素的个数。
语法结构:
zcount key minscore maxscore
示例:
zcount k1 100 300 统计100分到300分中间元素的个数
zrank
返回value在集合中的排名,从0开始。
语法结构:
zrank key value
示例:
zrank k1 c++ 返回c++排名
实时学习反馈
1. Redis技术Zset数据类型中如何给将一个或多个元素(value)及分数(score)加入到有序集key 中。
A zadd
B zrange
C zrangebyscore
D zcount
2. Redis技术Zset数据类型中如何返回key集合中的索引start和索引end之间的元素。
A zadd
B zrange
C zrangebyscore
D zcount