Redis支持五种数据类型

  • String(字符串
  • Hash(哈希)
  • List(列表)
  • Set(集合)
  • zset(sorted set:有序集合)

类型

简介

特性

场景

String(字符串)

二进制安全

可以包含任何数据,比如jpg图片或者序列化的对象,一个键最大能存储512M


Hash(字典)

键值对集合,即编程语言中的Map类型

适合存储对象,并且可以像数据库中update一个属性一样只修改某一项属性值(Memcached中需要取出整个字符串反序列化成对象修改完再序列化存回去)

存储、读取、修改用户属性

List(列表)

链表(双向链表)

增删快,提供了操作某一段元素的API

1,最新消息排行等功能(比如朋友圈的时间线) 2,消息队列

Set(集合)

哈希表实现,元素不重复

1、添加、删除,查找的复杂度都是O(1) 2、为集合提供了求交集、并集、差集等操作

1、共同好友 2、利用唯一性,统计访问网站的所有独立ip 3、好友推荐时,根据tag求交集,大于某个阈值就可以推荐

Sorted Set(有序集合)

将Set中的元素增加一个权重参数score,元素按score有序排列

数据插入集合时,已经进行天然排序

1、排行榜 2、带权重的消息队列


String(字符串)

string类型是二进制安全的,redis的string可以包含任何数据,如图像、序列化对象。一个键最多能存储512MB。二进制安全是指,在传输数据的时候,能保证二进制数据的信息安全,也就是不会被篡改、破译;如果被攻击,能够及时检测出来 。

  • 设置键值 :set key value
  • 获取键值 ,如果不存在此键则返回nil :get key
  • 服务器Redis需要多大内存_字符串

  • 设置多个键值:mset key1 value1 key2 value2
  • 获取多个键值:mget key1 key2
  • 服务器Redis需要多大内存_权重_02

  • 设置键值及过期时间,以秒为单位 :setex key seconds value
  • 服务器Redis需要多大内存_键值_03

  • 只有在 key 不存在时设置 key 的值。setnx key value
  • 服务器Redis需要多大内存_字符串_04

  • 同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。MSETNX key value [key value ...]
  • 返回 key 中字符串值的子字符 GETRANGE key start end
  • 将给定 key 的值设为 value ,并返回 key 的旧值(old value)。GETSET key value
  • 将key对应的value加1 。INCR key
  • 将key对应的value加整数 。 INCRBY key increment
  • 将key对应的value减1 。 DECR key
  • 将key对应的value减整数。 DECRBY key decrement
  • 追加值 APPEND key value
  • 获取值长度 STRLEN key

hash

Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。 Redis 中每个 hash 可以存储 2的32次方 - 1 键值对(40多亿)。

  • 设置单个属性 :hset key field value
  • 设置多个属性 :hmset key field1 value1 field2 value2 ...
  • 只有在字段 field 不存在时,设置哈希表字段的值。 HSETNX key field value

服务器Redis需要多大内存_权重_05

  • 获取⼀个属性的值 : hget key field
  • 获取多个属性的值 : hmget key field1 field2 ...
  • 获取指定键所有的属性 :hkeys key
  • 获取指定键所有属性的值:hvals key

服务器Redis需要多大内存_权重_06

  • 删除属性及值 :hdel key field1 field2 ...
  • 删除整个hash键及值 :del key
  • 判断属性是否存在 : hexists key field

服务器Redis需要多大内存_服务器Redis需要多大内存_07

list

列表是简单的string列表,按照插入顺序排序,可以在列表的头部或者尾部添加元素。

  • 在左侧插⼊数据 :lpush key value1 value2 ...
  • 在右侧插⼊数据 :rpush key value1 value2 ...
  • 在指定元素的前或后插⼊新元素 :linsert key before或after 现有元素 新元素

服务器Redis需要多大内存_键值_08

  • 返回列表⾥指定范围内的元素 :lrange key start stop
  • start、stop为元素的下标索引
  • 索引从左侧开始,第⼀个元素为0
  • 索引可以是负数,表示从尾部开始计数,如-1表示最后⼀个元素

服务器Redis需要多大内存_权重_09

  • 设置指定索引位置的元素值 :lset key index value
  • 索引从左侧开始,第⼀个元素为0
  • 索引可以是负数,表示尾部开始计数,如-1表示最后⼀个元素

服务器Redis需要多大内存_权重_10

  • 移出并获取列表的第一个元素 :lpop key
  • 移出并返回列表最后一个元素 : rpop key

服务器Redis需要多大内存_键值_11

  • 删除指定元素: lrem key count value
  • 将列表中前count次出现的值为value的元素移除
  • count > 0: 从头往尾移除
  • count < 0: 从尾往头移除
  • count = 0: 移除所有

服务器Redis需要多大内存_权重_12

  • 获取列表长度:llen key
  • 通过索引获取列表中的元素:lindex key index

服务器Redis需要多大内存_键值_13

set

⽆序集合,元素为string类型,元素具有唯⼀性,不重复。说明:对于集合没有修改操作。

  • 添加元素 :sadd key member1 member2 ...
  • 返回集合元素个数:scard key
  • 返回key集合所有的元素 :smembers key

服务器Redis需要多大内存_权重_14

zset

sorted set,有序集合,元素为string类型,元素具有唯⼀性,不重复。每个元素都会关联⼀个double类型的score,表示权重,通过权重将元素从⼩到⼤排序。说明:没有修改操作。

  • 添加元素:zadd key score1 member1 score2 member2 ..

向键’a4’的集合中添加元素’lisi’、‘wangwu’、‘zhaoliu’、‘zhangsan’,权重分别为4、5、6、3

服务器Redis需要多大内存_权重_15

  • 返回指定范围内的元素 :zrange key start stop
  • 返回元素个数:zcard key
  • 返回score值在min和max之间的成员 : zrangebyscore key min max
  • 返回成员member的score值 : zscore key member
  • 服务器Redis需要多大内存_字符串_16

  • 删除指定元素 :zrem key member1 member2 ..
  • 删除权重在指定范围的元素:zremrangebyscore key min max
  • 服务器Redis需要多大内存_键值_17