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在给定区间的元素