redis支持string、hash、list、set、zset五种数据类型,一个键最大存储512M。
一.String
redis的string可包含任何数据,如jpg图片或序列化对象,string在redis内部存储默认就是一个字符串,被redisObject所引用,当遇到incr,decr等操作时会转成数值型进行计算,此时redisObject的encoding字段为int。
1.set name abcdef新增键值对(一个key对应一个value)
2.setnx name abcdef(nx即not exist,如name不存在则插入,否则返回0)
3.setex age 10 15(设置age=15,有效期10s)
4.setrange name 2 bb (将name=abcdef的第二个字符开始替换,替换子串小于原串,则原串后面字符依旧保留)
5.mset key1 zhangsan key2 lisi (批量加入key1和key2)
6.msetnx key1 zhangsan key2 lisi ( key已存在则不覆盖,一个key失效,则都失败)
7.getset key1 wangwu (将key1设置为wangwu)
8.getrange key1 0 2 (得到wangwu从下标0到2的字符串返回)
9.mget key1 key2 (批量获取,没设置的key会返回nil)
10.incr age (对key递增,每次+1,如果key不存在则默认值为0)
11.incrby age 5 (将age属性自增5)
12.decr age (age属性自减1)
13.decrby age 5(age属性自减5)
14.append key1 @qq.com (将@qq.com追加到key属性值后面)
15.strlen key1 (获取key1字符串长度)
二.hash
hash是string类型的field和value的映射表,hash实际是内部存储的Value为一个HashMap,并提供了直接存取这个Map成员的接口。
1.hset user:001 name zhangsan age 10( 设置指定key的name为zhangsan,如果key不存在,则创建)
2.hget user:001 name( 获取指定key的name属性值)
3.hsetnx myhash field “hello” (存在则插入失败)
4.hmset user:001 name zhangsan user:002 name lisi (批量插入)
5.hget user:001 (获取user:001的属性值)
6.hmget user:001 user:002 (批量获取)
7.hincrby user:001 age 5 (将指定key的age自增5)
8.hexists user:003 age (判断user:003中是否有age属性)
9.hdel user:003 age(删除user:003的age属性)
10.hkeys user:001(返回所有属性)
11.hvals user:001 (返回hash表中所有value)
12.hgetall user:001 (获取user:001的所有属性和对应值)
三.list
list的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销,Redis内部的很多实现,包括发送缓冲队列等也都是用的这个数据结构。
1.lpush list1 aaa (头插)
2.lrange mylist 0-1 (依次获取mylist中从头部到尾部的元素)
3.rpush mylist bbb (从尾部插入元素bbb)
4.linsert list3 before one three (在one之后插入three)
5.lset mylist 0 "world" (把下标是0的改为world)
6.lrem mylist 1 "world" (从mylist中删掉1个“world”)
7.ltrim list1 1 2 (将list1中除了下标是1,2的都删掉)
8.lpop list1 (头list1头部删除元素并返回删除元素)
9.rpop list1 (从list1尾部删除元素并返回删除元素)
10.lindex list1 3 返回list1中index是3的元素
四.set
set是string类型的无序集合,set 的内部实现是一个 value永远为null的HashMap,实际就是通过计算hash的方式来快速排重的,这也是set能提供判断一个成员是否在集合内的原因。
1.sadd myset "hello" (向myset中增加“hello”)
2.smember myset (查看myset中元素)
3.srem myset “hello”(删除名称为key的set中元素)
4.spop myset “hello”(随机返回并删除名称为hello的元素)
5.sdiff myset2 myset3 (返回所有给定key与第一个key的差集)
6.sunion myset1 myset2 (返回两个set的并集)
7.sinter myset1 myset2(返回两个set的交集)
8.scard myset2(返回集合myset2中的元素个数)
9.sismember myset two (测试two是否是集合元素,是返回1)
10.srandmember myset (随机返回集合众任一元素)
五.zset
zset的内部使用HashMap和跳跃表(SkipList)来保证数据的存储和有序,HashMap里放的是成员到score的映射,而跳跃表里存放的 是所有的成员,排序依据是HashMap里存的score,使用跳跃表的结构可以获得比较高的查找效率,并且在实现上比较简单。
1.zadd myzset 1 “one”(添加元素one到集合中,1是排序号)
2.zrange myzset 0 -1 withscores (输出索引位置是0和1的元素及其排序)
3.zrem myzset “two” ( 删除集合中two)
4.zrem myzset two(删除two元素)
5.zrevrank myzset two(降序排序再获取索引)
6.zrangebyscore myzset 2 3 withscores中( 找到2-3范围内元素打印)
7.zcard myzset (返回集合中所有元素个数)
8.zremrangebyrank myzset 1 删除集合中索引为1的元素