02redis操作及数据类型
一.常用的5大基本数据类型
- 字符串 String
- 列表 List
- 集合 Set
- 哈希 Hash
- 有序集合 Zset
二.key相关命令
keys * 查看当前库所有key
exists key 判断某个key是否存在
type key 查看某个Key是什么数据类型
del key 删除指定key的数据
unlink key 根据value选择非阻塞删除,仅仅将key从keyspace元数据中删除,真正的操作在后续异步操作。
expire key 10 为key设置为10分钟的过期时间
ttl key 查看还有多久过期,-1永不过期 -2已经过期
dbsize 当前库key的数量
select 1 选择1号库
flushdb 清空当前库
flushall 清空所有库
三.字符串string
string类型是二进制安全的。意味着Redis的string可以包含任何数据,比如图片jpg,序列化对象
一个redis中字符串的value最多可以是512M。
key都是用字符串,value都行。
命令:
set key value ,向当前库存值,key相同会覆盖以前的值
get key ,向当前库取键为Key的值
append key value 向为key 的值后面追加value值,返回总长度
strlen key 获取key的value的长度
setnx key value 向当前库设置值,若存在key则失败,不存在key才成功。失败返回0 成功返回1
incr key 当这个key的value为数字时,让当前value加1
decr key 同上,减一
incr key step 将当前key加step
decr key step 同上,减step
mset k1 v1 k2 v2 ...... 同时设置多个key,value
mget k1 k2 k3 ...... 同时获取一个或多个value
msetnx k1 v1 k2 v2 ...... 同时设置一个或多个键值对,当且仅当所有的key都不存在
gettrange key 开始位置 结束位置 获取值的范围 相当于subString
setrange key 位置 value 向key的给定位置插入value
setex key 过期时间 value 设置值的时候设置过期时间
getset key value 返回旧值返回新值
redis底层的string数据类型是可以动态扩容的string,最大长度512M
四.Redis 列表List数据类型
List数据类型作为value,在redis中相当于,单键多值
该list按照插入顺序排序,当然也可以插入到中间,但是效率低。数据结构是一个双向链表
常用命令:
lpush/rpush k v1 v2 v3 ...... 从左/右边插入一个或多个值
lpop/rpop key 从左边/右边吐出一个值,若值至少有一个,则不灭亡。若全部之pop,则消失
rpop|lpush k1 k2 从右边吐出一个值并从左边插入
lrange key start stop 按照索引下标获取元素,从左到右 lrange key 0 -1 获取全部
lindex key index 获取key 下标为index的值
llen key 获取key的value的个数
linsert key before/after value newvalue 在key的value的前面或后面插入newvalue
lrem key n value 从左开始删除n个值为value的值
lset key index value 将key的下标为index的值换为value
数据结构:
List底层数据结构是一个快速链表quickList。
元素少会使用一块连续的存储空间,简称zipList压缩列表
当元素多的时候,就是多个压缩列表,并将多个压缩列表形成双向链表。这样减少了指针的使用。
五.Redis 集合(Set)
set提供的工程和list类似,特殊之处在于set可以自动排重,当需要存储列表数据又不需要重复数据的时候,就可以选择set。
命令:
sadd k1 v1 v2 v3...... 将一个或多个元素加入键为key的集合中,已经存在的将会被忽略。
smenbers key 取处键为key的所有值
sismenber key value 判断键为key的集合是否存在值为value的值,存在返回1,不存在返回0
scard key 返回键为key的集合的个数
srem key v1 v2 ...... 删除键为key的集合中的元素(同时可以多个)
spop key 随机从键为Key的集合中吐出一个值
srandmenber key n 随机从集合中取出n个值,不会从集合中删除
smove source destinnation value 把集合中一个值从一个集合移动到另一个集合
sinter key1 key2 返回两个集合的交集元素
sunion key1 key2 返回两个集合的并集元素
sdiff key1 key2 返回两个集合的差集元素(key1-key2)
底层数据结构:
redis的set结构和hashset内部是实现一样,内部都是使用HashMap,所有的value都指向同一个内布值。
六.Redis 哈希(Hash)
redis hash是一个键值对集合
hash结构特别适合存储对象。
常用命令:
hset key filed value 给键为key的集合中的filed赋值为value
hget key field 从key的field取出value
hmset key f1 v1 f2 v2 ......批量设置一个Key对应多个key value
hexists key field 查看key.field是否存在
hkeys key 列出key的所有field
hvals key 列出key的所有value
hincrby key field increment 为哈希表key中的域field的值加上1
hsetnx key field value 将哈希表key的field的值设置为value,当且仅当当前field不存在
底层数据结构:
Hash类型对应数据结构两种,因为一个field,value对应一个list类型中的value
当数据少的时候使用压缩表ziplist,数据多用哈希表
七.Redis 有序集合(Zset)
有序集合与普通集合非常类似,都没有重复元素。但是Set集合是无序的,而Zset是有序的。在Zset中每个成员都关联了一个评分,该评分就是用来对元素进行排序的关键。元素不能重复,但是评分可以重复。
常用命令:
zadd key score1 value1 score2 value2...... 将一个或多个元素及其对应的评分添加到有序集合中
zrange key start stop 【WITHSCORES】返回有序集合中下标在start,stop之间的元素。带上withscores,可以让评分一起返回
zrangebyscore key minmax [withscores] [limit offset count] 返回有序集合key中,所有频分在min,max之间的成员。成员按照评分值递增排序。
zrevrangebyscore key maxmin [withscores] [limit offset count] 同上改为从大到小排序
zincrby key increment value 为元素的score加上增量
zrem key value 删除改集合下,指定的元素
zcount key min max 统计该集合 在该min,max区间的元素个数
zrank key value 返回该值在集合中的排名,从0开始
底层数据结构:
等价于hash。和hash数据类型差不多,评分相当于field
跳跃表,跳跃表的目的在于给元素value排序,根据评分的返回获取元素列表


浙公网安备 33010602011771号