一、五种基本数据类型
字符串、哈希、列表、集合、有序集合(string、hash、list、set、zset)
二、字符串的使用(string)
字符串类型是Redis中最基本的数据类型,它能存储任何形式的字符串,包括二进制数据,序列化后的数据,json化的对象甚至是一张图片,最大512m
优点:简单直观,每个键对应一个值
缺点:键数过多,占用内存多,用户信息过于分散,不用于生成环境
常用命令使用:
语法 | 作用 |
set key value | 将字符串值value设置到key中 |
get key | 获取key中设置的字符串值 (如果key存在,则返回value,否则返回nil,相当于null) |
incr key | 将key中存储的数字值加1,如果key不存在,则key的值先被初始化为0再执行incr操作(只能对数字类型的数据操作) |
decr key | 与incr相反,自减操作 |
del key | 删除key值 |
strlen key | 返回key所存储的字符串的长度。返回值:如果key存在,返回字符串的长度,否则返回0 |
getrange key start end | 获取key中字符串值从start开始到end结束的子字符串,包括start和end,负数表示从字符串的末尾开始,-1表示最后一个字符 返回值:截取的子字符串 一般getrange key 0 -1 |
mset key value | 同时设置一个或多个 key-value 对 返回值:OK |
mget key [key....] | 获取所有(一个或多个)给定key的值 返回值:包含所有key的列表 |
set key value nx ex 10 | 设置一个键,值为value,nx为如存在键则不成功,否则则设置键,ex为秒过期时间 1000(分布式) |
set key value nx px 10000 | 设置一个键,值为value,nx为如存在键则不成功,否则则设置键,p为x毫秒过期时间 1000(分布式) |
pttl key | 查询键过期时间毫毛值 |
ttl | 查询键过期时间秒值 |
linux实操:
三、哈希的使用(hash)
Redis,hash是一个String类型的field和value的映射表,hash特别适用于存储对象
优点:简单直观,使用合理可减少内存空间消耗
缺点:要控制ziplist与hashtable两种编码转换,且hashtable会消耗更多内存erialize(userInfo)
常用命令使用:
语法 | 作用 |
hset key field value | 将哈希表key中的域field的值设为value |
hget key field | 获取哈希表key中给定域field的值;返回值:field域的值,如果key不存在或者field不存在返回nil |
hmset key field[field value..] | 同时将多个field-value设置到哈希表key中 |
hmget key field[field...] | 获取多个hash值 |
hlen key | 获取key的长度 |
hdel key field [field...] | 删除哈希表key中的一个或多个指定域field,不存在field直接忽略 返回值:成功删除field的数量 |
hincrby key age 1 | age+1 |
hkeys key | 查看哈希表key中的所有域 返回值:包含所有field的列表,key不存在返回空列表 |
hvals key | 返回哈希表中所有域的值 返回值:包含哈希表所有域值的列表,key 不存在返回空列表 |
hexists key field | 查看哈希表key中,给定域field是否存在 返回值:存在返回1,其它返回0 |
hgetall key | 获取key的所有信息,全选功能 |
linux实操:
四、列表的使用(list)
redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左部)或者尾部(右边)
左右添加,有索引,链表维护
常用命令使用:
语法 | 作用 |
Ipush key value [value...] | 将一个或多个值value插入到列表key的表头(最左边),从左边开始加入值,从左到右的顺序依次插入到表头 返回值:数字,新列表的长度 |
rpush key value [value...] | 将一个或多个值value 插入到列表key的尾部(最右边),各个value值按从左到右的顺序依次插入到尾部 返回值:数字,新列表的长度 |
lpop key | 从左边弹出一个元素 |
rpop key | 从右边弹出一个元素 |
Irange key start stop | 获取列表key中指定区间内的元素;lrange key 0 -1 取出全部 |
lindex key index | 获取列表key中下标为指定index的元素,列表元素不删除,只是查询 |
llen key | 获取列表key的长度 返回值:数值,列表长度,key不存在返回0 |
lrem key count value | 根据参数count的值,移除列表中与参数value相等的元素两(两个值),count>0,从列表的左侧向右开始移除;count<0从列表的尾部开始移除;count=0移除表中所有与value相等的值 返回值:数值,移除的元素的值 |
lset key index value | 将列表key下标为index的元素的值设置为value |
linsert key before|after pivot value | 将值value插入到列表key当中位于值pivot之前或之后的位置 |
linux实操:
五、集合的使用(set)
redis的set是string类型的无序集合,集合成员是唯一的,即集合中不能出现重复的数据
常用命令使用:
语法 | 作用 |
sadd key member [member...] | 将一个或多个member元素加入到集合key当中,已经存在于集合的member元素被忽略掉,不会再加入 |
smembers key | 获取集合key中的所有成员元素,不存在的key视为空集合 |
sismember key member | 判断member元素是否是集合key的成员 |
scrad key | 获取集合里面的元素个数 |
srem key member[member...] | 删除集合key中的一个或多个member元素,不存在的元素被忽略 |
srandmember key count | 只提供key,随机返回集合中一个元素,元素不删除,依然在集合中。提供了count时,count正数,返回包含count个数元素的集合,集合元素各不相同 |
spop key count | 只有key则随机从集合中删除一个元素。有count则随机删除的count个元素个数 |
linux实操:
六、有序集合的使用(zset)
redis有序集合zset和集合set一样也是string类型元素的集合,且不允许重复的成员。不同的是zset的每个元素都会关联一个分数,redis通过分数来为集合的成员进行从小到大的排序
常用于排行榜,如视频网站需要对用户上传视频做排行榜,或点赞数与集合有联系,不能有重复的成员
常用命令使用:
语法 | 作用 |
zadd key score member [score member...] | 将一个或多个 member 元素及其score值加入到有序集合key中,如果member存在集合中,则更新值 |
zrange key start stop[withscores] | 查询有序集合,指定区间之内的元素。集合成员按score值从小到大来排序;带withscores选项让score和value一同返回 |
zrevrange key start stop[withscores] | 返回有序集key中,指定区间内的成员,其中成员的位置按score值递减(从大到小来排序) |
zrem key member[member...] | 删除有序集合key中的一个或多个成员,不存在的成员被忽略 |
zcard key | 获取有序集key的元素成员的个数 |
zrangebyscore key min max[withscores][limit offset count] | 获取有序集key中,所有score值介于min和max之间(包括min和max)的成员,有序成员是按递增(从小到大)排序zrangebyscore key 60 90 |
zcount key min max | 返回有序集key中,score值在min和max之间(默认包括score值等于min或max的成员的数量)zcount key 60 90 |
linux实操: