值的五大数据类型
1.String 2.set 3.list 4.hash 5.zset
有关键操作的命令
1.keys *
- * 查询当前库的所有键
2.exists <key>
- 判断某个键是否存在
3.type <key>
- 查看键的类型
4.del <key>
- 删除某个键
5.expire <key> <seconds>
- 为键值设置过期时间,单位秒。
6.ttl <key>
- 查看还有多少秒过期,-1表示永不过期,-2表示已过期
7.move <key> <db>
- 把键移动到另一个库下
8.dbsize
- 查看当前数据库的key的数量
9.flushdb
- 清空当前库
10.flushall
- 通杀全部库
String类型
String是Redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。
String类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。
二进制安全指存储一致
String类型是Redis最基本的数据类型,一个Redis中字符串value最多可以是512M
String类型的值的操作命令
1.get <key>
- 查询对应键值
2.set <key> <value>
- 添加键值对
3.append <key> <value>
- 将给定的<value> 追加到原值的末尾
4.strlen <key>
- 获得值的长度
5.setnx <key> <value>
- 只有在 key 不存在时设置 key 的值
6.incr <key>
- 将 key 中储存的数字值增1
- 只能对数字值操作,如果为空,新增值为1
7.decr <key>
- 将 key 中储存的数字值减1
- 只能对数字值操作,如果为空,新增值为-1
8.incrby / decrby <key> <步长>
- 将 key 中储存的数字值增减。自定义步长。
9.mset <key1> <value1> <key2> <value2> ……
- 同时设置一个或多个 key-value对
10.mget <key1> <key2> <key3>……
- 同时获取一个或多个 value
11.msetnx
- 同时设置一个或多个key-value对,当且仅当所有给定key都不存在时
12.getrange <key> <起始位置> <结束位置>
- 获得值的范围,类似java中的substring
- 闭区间
13.setrange <key> <起始位置> <value>
- 用<value>覆写<key>所存储的字符串值,从<起始位置>开始
14.setex <key> <过期时间> <value>
- 设置键值的同时,设置过期时间,单位为 秒
15.getset <key> <value>
- 以新换旧,设置新值同时获得旧值
List类型
单键多值
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)。
它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。
List类型的值的操作命令
1.lpush / rpush <key> <value1> <value2> <value3> ……
- 从左边 / 右边插入一个或多个值
2.lpop / rpop <key>
- 从左边 / 右边吐出一个值
- 值在健在,值亡键亡
- 吐完之后,键值对就不再存在,相当于删除
3.rpoplpush <key1> <key2>
- 从 <key1> 列表右边吐出一个值,插到 <key2> 列表左边
例如
lpush k1 1 2 3 4 5 6
rpush k2 7 8 9 10 11
rpoplpush k1 k2
结果是
k1 2 3 4 5 6
k2 1 7 8 9 10 11
4.lrange <key> <start> <end>
- 按照索引下标获得元素(从左到右)
5.lindex <key> <index>
- 按照索引下标获得元素(从左到右)
6.llen <key>
- 获得列表长度
7.linsert <key> before <value> <newvalue>
- 在 <value> 的后面插入 <newvalue> 插入值
8.lrem <key> <n> <value>
- 从左边删除n个value(从左到右)
Set类型
Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。
Redis的Set是string类型的无序集合。它底层其实是一个value为null的hash表,所以添加,删除,查找的复杂度都是O(1)。
Set类型的值的操作命令
1.sadd <key> <value1> <value2> ……
- 将一个或多个 member 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。
2.smembers <key>
- 取出该集合所有的值
3.sismember <key> <value>
- 判断集合 <key> 是否为含有该 <value> 值
- 有 返回1
- 无 返回0
4.scard <key>
- 返回该集合的元素个数
5.srem <key> <value1> <value2> ……
- 删除集合中的某个元素
6.spop <key>
- 随机从集合只能够吐出一个值
7.srandmember <key> <n>
- 随机从集合中取出 n 个值
- 不会从集合删除
8.smove <key1> <key2> <value>
- 将key1集合中的 <value> 值移到 key2 集合中
例如
sadd k1 1 2 3 4
sadd k2 3 4 5 6
sinter k1 k2
结果是
3 4
9.sinter <key1> <key2>
- 返回两个集合的交集元素
例如
sadd k1 1 2 3 4
sadd k2 3 4 5 6
sunion k1 k2
结果是
1 2 3 4 5 6
10.sunion <key1> <key2>
- 返回两个集合的并集元素
11.sdiff <key1> <key2>
- 返回两个集合的差集
例如
sadd k1 1 2 3 4
sadd k2 3 4 5 6
sinter k1 k2
结果是
3 4
sunion k1 k2
结果是
1 2 3 4 5 6
sdiff k1 k2
结果是
1 2
Hash类型
Redis hash 是一个键值对集合。
Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
类似Java里面的Map<String,Object>
用户ID为查找的key,存储的value用户对象包含姓名,年龄,生日等信息,如果用普通的key/value结构来存储,主要有以下2种存储方式:
1.每次修改用户的某个属性需要,先反序列化改好后再序列化回去。开销较大。
2.用户ID数据冗余
通过 key(用户ID) + field(属性标签) 就可以操作对应属性数据了,既不需要重复存储数据,也不会带来序列化和并发修改控制的问题
Hash类型的值的操作命令
1.hset <key> <field> <value>
- 给 <key> 集合中的 <field> 键 赋值 <value>
2.hget <key1> <field>
- 从<key1>集合<field> 取出 value
3.hmset <key1> <field1> <value1> <field2> <value2>...
- 批量设置hash的值
4.hmget <key1> <field1> <field2> ...
- 批量设置hash的值
5.hexists key <field>
- 查看哈希表 key 中,给定域 field 是否存在。
6.hkeys <key>
- 列出该hash集合的所有field
7.hvals <key>
- 列出该hash集合的所有value
8.hincrby <key> <field> <increment>
- 为哈希表 key 中的域 field 的值加上增量 increment
9.hsetnx <key> <field> <value>
- 将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在
Zset类型 (sorted set)
也是一个Set集合,但是增加了score属性,可以按照score 排序
评分score
Redis有序集合zset与普通集合set非常相似,是一个没有重复元素的字符串集合。不同之处是有序集合的没有成员都关联了一个评分(score) ,这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员。
集合的成员是唯一的,但是评分可以是重复了 。
因为元素是有序的, 所以你也可以很快的根据评分(score)或者次序(position)来获取一个范围的元素。访问有序集合的中间元素也是非常快的,因此你能够使用有序集合作为一个没有重复成员的智能列表。
Zset的操作命令
1.zadd <key> <score1> <value1> <score2> <value2> ……
- 将一个或多个member元素及其score值加入到有序集当中
2.zrange <key> <start> <stop> [WITHSCORES]
- 返回有序集 key 中,下标在<start> <stop>之间的元素
- 带WITHSCORES,可以让分数一起和值返回到结果集。
3.zrangebyscore key min max [WITHSCORES][limit offset count]
- 返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。
- 有序集成员按 score 值递增(从小到大)次序排列。
4.zrevrangebyscore key max min [withscores] [limit offset count]
- 返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。
- 有序集成员按 score 值递增(从大到小)次序排列。
5.zincrby <key> <increment> <value>
- 为元素的score加上增量
6.zrem <key> <value>
- 删除该集合下,指定值的元素
7. zcount <key> <min> <max>
- 统计该集合,分数区间内的元素个数
8.zcard <key>
- 获取集合中元素个数
9.zrank <key> <value>
- 返回该值在集合中的排名,从0开始