Redis 数据类型要点

来源:互联网 发布:淘宝店服装细节模板 编辑:程序博客网 时间:2024/06/06 04:59
字符串
1、Redis命令不区分大小写
2、字符串型是Redis最基本的数据类型,能存任何形式的字符串,包括二进制数据。一个字符串类型最大容量是512M
3、字符串类型是其他4种数据类型的基础,其他数据类型和字符串类型的差别从某种程度来说只是组织字符串的形式不同
4、incr key
   当存储的字符串是整数形式时候,Redis提供了incr命令,其作用是让当前键值递增,并返回增值后的值。当要操作的键不存在时会默认值为0,所以第一次增值后的结果为1;
5、键的命名:建议“对象类型:对象ID:对象属性”
6、set key value
   get key
7、incrby命令与incr命令基本一样,只不过前者可以通过increment参数指定一次增加的数值
   如:Incrby mzx 3 给key为mzx自增3
   类似还有
  decr key
  decrby key decrement
8、增加指定浮点数
  incrbyfloat key increment
9、向尾部追加值
  append key value
10、获取字符串长度
  strlen key
11、同时设置/获取多个键值
  mset key1 value1 key2 value2...
  mget key1 key2




               (key)      (field) (value)
散列类型 hash<String,Hash<String,String>>
1、散列类型的键值是一种字典结构,其存储了字段和字段值的映射,但字段值只能是字符串,不支持其他数据类型,换句话说,散列类型不能嵌套其他的数据类型。
   Redis的其他数据类型同样不支持数据类型嵌套。
2、散列类型适合存储对象:使用对象类别和ID构成键名,使用字段表示对象的属性,而字段值则存储属性值。
   例如:键 字段 字段值   car:2  color 白色
3、赋值与取值
   hset key field value
   hget key field
   hmset key field1 value1 field2 value2...
   hmget key field1 field2..
   hgetall key
4、hset命令的方便之处在于不区分插入和更新操作,这意味着修改数据时不用事先判断字段是否存在。当执行插入则返回1,执行更新则返回0。更进一步,如何键本身不存在,则自动创建
5、在Redis中每个键都属于一个明确的数据类型,如通过hset命令建立的键是散列类型,通过set命令建立的键是字符串类型等。使用一种数据类型的命令操作另外一种数据类型会保错。
   但并不是所有都如此,比如set命令可以覆盖已经存在的键而不论原来键是什么类型
6、判断字段是否存在
  散列 hexists key field
  字符串 exists key
7、当字段不存在时赋值(原子操作)
  散列 hsetnx key field value
  字符串 setnx key value
8、增加数字
  散列 hincrby key field increment
  字符串 incrby key increment
  之前键不存在,HINCRBY命令会自动建立该键并默认score字段在执行命令前的值
为“0”。命令的返回值是增值后的字段值
9、删除字段
  hdel key field1 field2...
  可以通过del key 删除整个key(估计不管啥类型)
10、只获取字段名或字段值
  hkeys key
  hvals key
11、获取字段数量
  hlen key




列表类型
1、列表类型可以存储一个有序的字符串列表,常用的操作室向列表两端添加元素,或者获得列表的某一个片段。
  使用双向链表实现,故向两端添加的复杂度为O(1)。通过索引访问元素的速度慢
2、使用场景:
   如社交网站的新鲜事,获取其中最新的100条数据;
   用来记录日志,可以保证新日志的速度不会受到已有日志数量的影响
   可作为队列使用
3、向列表两端添加元素
   lpush key value1 value2..
   rpush key value1 value2..
4、从列表两端弹出元素
   lpop key
   rpop key
5、获取列表元素的个数
   llen key
6、获取列表片段
   lrange key start stop(stop 大于实际范围,返回最右边元素)
   lrange key -2 -1 (表示从右边开始计算序数)
7、删除列表中指定的值
   lrem key count value(删除列表中前count个值为value的元素,返回实际删除的个数)
   当count>0则从左边开始删除
   当count<0则总右边开始删除
   当count=0则删除所有值为value的元素
8、获取/设置指定索引的元素值
   lindex key index
   lset key index value
9、只保留列表指定片段
   ltrim key start end
10、向列表插入元素
   linsert key before|after pivot value
   在列表中从左到右查找值为pivot的元素,然后根据第二个参数将value插入到该元素的前面或后面




集合类型
1、集合和列表非常类似,差别在于:
   集合的元素不是有序的,而列表有序
   集合的元素是唯一的,而列表不唯一
2、增加/删除元素
   sadd key member1 member2...
   srem key member1 member2...
3、获取集合中所有的元素
   smembers key
4、判断元素是否存在集合中
   sismember key member
5、集合间运算
   sdiff key1 key2..(A-B)
   sinted key1 key2..(A和B的交集)
   sunion key1 key2..(A和B的并集)
6、使用场景:
   文章标签(post:文章ID:tags为键名存储文章的标签)


有序集合
1、在集合类型的基础上有序集合类型为集合中的每个元素都关联了一个分数,这使得我们
   不仅可以完成插入、删除和判断元素是否存在等集合支持的操作,还能获得分数最好或最低的前N
   个元素、获取指定分数范围内的元素等与分数相关的操作。虽然集合中每个元素都不同,但是它们
   的分数却可以相同
2、有序集合和列表的区别:
  (1)有序集合类型是使用散列表和跳跃表实现的,所以即使读取位于中间元素也很快
  (2)列表中不能简单地调整某个元素的位置,但是有序集合可以(通过更改这个元素的分数)。
  (3)有序集合要比列表类型更耗内存  
3、增加元素
  zadd key score member score member...
4、获取元素的分数
  zscore key member
5、获取排名在某个范围的元素列表
  zrange key start stop[withscores]
6、获取指定分数范围的元素
  zrangebyscore key min max[withscores]
  







0 0
原创粉丝点击