Redis基础类型
String 字符串类型
二进制安全,可以包含任何数据,比如jpg图片或者序列化的对象;从内部实现看,string其实可以看做byte数组,最大上限是1G字节
语法
set name qinghuazangshui --赋值 set key value
get name --获取内容 get key
setnx (not exist)
setnx name qinghua --存在则修改,不存在则赋值 setnx key value
setex (expired)
setex name 10 qinghua2 --设置过期时间
setrange name 2 qaq --从第二位开始替换,替换成qaq
mset key1 value1 key2 value2 --设置多个键值
mget key1 key2 key3 --一次性取多个值
getset name qinghua3 --返回旧值,返回新值 getset key value
incr age --递增操作,数字类型 incr key,相当于++操作,如果value不是int类型的会返回错误,incr一个不存在的key,则设置key的值为1
decr age --递减操作,数字类型 decr key, 相当于--操作,decr一个不存在的key,则设置key的值为-1
incrby/decrby age 3 --增加/减少指定的值 incrby/decrby key integer
append name 123 --追加
Hash类型
Hash类型是String类型key和value的映射表,或者说是一个String集合
添加、删除操作都是O(1)(平均)
适合存储对象
相对而言,将一个对象类型存储在Hash类型里要比存储在String类型里占用更少的内存空间,并方便存取整个对象;省内存的原因是新建一个hash对象时开始使用zipmap来存储的。
如果field或者value的大小超出一定限制后,redis会在内部自动将zipmap替换成正常的hash实现,可以在配置文件中设置最大值
hash-max-zipmap-entries 64 #配置字段最多64个
hash-max-zipmap-value 512 #配置value最大为512字节
语法
hset user id 1 --设置属性和值 hset key field value
hset user name qinghua
hset user age 18
hget user id --取值 hget key field
hget user name
hmset user id 2 name qinghua2 age 20 --批量设置键值 hmset key field1 value1 field2 value2...
hmget user id name age --批量取值 hmget key field1 field2...
hexists user age --是否存在键值 hexists key field
hlen user --user的长度 hlen key 返回指定hash的field的数量
hkeys user --获取user的所有键 返回hash的所有field
hvals user --获取user下的所有值 hvals key
hgetall user --返回hash的所有的键值 hgetall key
hdel key field --删除指定的hash field
hincrby key field integer --将制定hash field加上指定值
List类型
链表结构(双向链表)的集合,即可以理解为一个每个子元素都是string类型的双向链表
主要功能有push、pop、获取元素等,可以在头部或尾部增删元素,操作中key理解为链表的名字
既可以作为栈,也可以作为队列
lpush list qinghua --从头部添加元素,返回1表示成功,0表示key存在且不是list类型 lpush key string
rpush list zangshui --在尾部添加元素 rpush key string
linsert list before zangshui qaq --插入
lrange list 0 -1 --遍历List,-1代表最后的索引位置 lrange key start end 返回指定区间内的元素,下标从0开始,复制表示从后面计算,-1表示倒数第一个元素,key不存在返回空列表
lset key index value--将制定下表的元素替换掉,成功返回1
lrem list 1 qinghua --删除元素,返回删除的元素个数 lrem key count value 从list的头部(正数)或尾部(负数)删除一定数量匹配value的元素,返回删除的元素数量,count为0时删除全部
ltrim key start end--保留指定key的值范围内的数据,截取 list指定区间内元素,成功返回 1,key不存在返回错误
lpop key--从头部删除元素,并返回删除元素
rpop key--从尾部删除元素,并返回删除元素
rpoplpush --从尾部删除元素,然后从头部插入元素
lindex --返回名称为key的list中index位置的元素
llen key--返回元素的个数,即返回key对应的list的长度,如果key不存在返回0,如果key对应类型不是list返回错误
set集合
string类型的无序集合,通过hashtable实现,实现集合的交集、并集、差集操作,查找的复杂度为O(1),hashtable会随着添加或者删除自动的调整大小,需要注意的是调整hash table大小的时候需要同步(获取写锁),会阻塞其他读写操作。
最大可以包含2^32-1个元素
set中不允许重复
sadd set1 aaa --添加元素 sadd key member 成功返回1,如果元素以及在集合中则返回0,key对应的set不存在则返回错误
srem key member --从key对应set中移除指定元素,成功返回1,如果member在集合中不存在或者key不存在返回0,如果key对应的不是set类型的值返回错误
spop key --删除并返回key对应set中随机的一个元素,如果set是空或者key不存在返回nil
srandmember key -- 同spop,随机取set中的一个元素,但是不删除元素
smove srckey destkey member --从srckey对应set中移除member并添加到destkey对应set中,整个操作是原子的。成功返回1,如果member在srckey中不存在返回0,如果key不是set类型返回错误
scard key --返回set中元素的个数,如果set是空或者key不存在返回0
smembers key --返回key对应set的所有元素,结果是无序的
sinter key1 key2 --返回所有给定key的交集
sinterstore destkey key1 key2 --取交集结果,并存储到指定集合destkey中
sunion key1 key2 --取并集
sunionstore destkey key1 key2 --取并集结果,并存储到指定集合destkey中
sdiff key1 key2 --返回所有给定key的差集
sdiffstore destkey key1 key2 --取差集结果,并存储到指定集合destkey中
sismember key member --判断member是否在set中,存在返回1,0表示不存在或者key不存在
zset 有序集合
可以做搜索排行
zadd key score member--向有序集合中添加一个元素,元素在集合中存在则更新对应score
zrem key member --删除指定元素,1表示成功,如果元素不存在返回0
zincrby key incr member --增加对应member的score值,然后移动元素并保持skip list保持有序。返回更新后的score值
zrank key member --返回指定元素在级合格中的排名(下标),集合中元素是按score从小到大排序的
zrevrank key member --同上,但是结合中元素是按score从大到小排序
zrange key start end --类似lrange操作从集合中去指定区间的元素,返回的是有序结果
zrevrange key start end --同上,返回结果是按score逆序的
zrangebyscore key min max --返回集合中score在给定区间的数量
zcount key min max --返回集合中score在给定区间的数量
zcard key --返回集合中元素个数
zscore key element --返回给定元素对应的score
zremrangebyrank key min max --删除集合中排名在给定区间的元素
zremrangebyscore key min max --删除集合中score在给定区间的元素