Redis数据类型介绍

list

实例

  1. redis 127.0.0.1:6379> lpush
    shouce.ren
    redis
  2. (integer) 1
  3. redis 127.0.0.1:6379> lpush
    shouce.ren
    mongodb
  4. (integer) 2
  5. redis 127.0.0.1:6379> lpush
    shouce.ren
    rabitmq
  6. (integer) 3
  7. redis 127.0.0.1:6379> lrange
    shouce.ren 0 10
  8. 1) “rabitmq”
  9. 2) “mongodb”
  10. 3) “redis”
  11. redis 127.0.0.1:6379>

列表最多可存储 232\ -\ 1 元素 (4294967295,
每个列表可存储40多亿)。


集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。sadd命令
添加一个string元素到,key对应的set集合中,成功返回1,如果元素已经存在集合中返回0,key对应的set不存在返回错误。sadd
key member实例redis 127.0.0.1:6379 sadd redis.net.cn redis(integer)
1redis 127.0.0.1:6379 sadd redis.net.cn mongodb(integer) 1redis
127.0.0.1:6379 sadd redis.net.cn rabitmq(integer) 1redis 127.0.0.1:6379
sadd redis.net.cn rabitmq(integer) 0redis 127.0.0.1:6379 smembers
redis.net.cn1) “rabitmq”2) “mongodb”3) “redis” 注意:以上实例中 rabitmq
添加了两次,但根据集合内元素的唯一性,第二次插入的元素将被忽略。集合中最大的成员数为
232 – 1 (4294967295, 每个集合可存储40多亿个成员)。

Hash(哈希)

Redis hash 是一个键值对集合。

Redis
hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。

zadd key score1 member1 [score2 member2] 想有序集合添加一个或多个成员, 或是更新已经存在成员的分数 uplooking01:6379 zadd website 0.01  (integer) 1 uplooking01:6379 zadd website 0.05  (integer) 1 uplooking01:6379 zadd website 0.1  (integer) 1 uplooking01:6379 zadd website 1  (integer) 1 uplooking01:6379 zadd website 0.005  (integer) 1zcard key 获取有序集合的成员数 uplooking01:6379 zcard website (integer) 5zcount key min max 计算在有序集合中指定区间分数的成员数 获取分数区间[min, max]中元素 uplooking01:6379 zcount website 0.01 0.1 (integer) 3zincrby key increment member 有序集合中对指定成员的分数上增量incr uplooking01:6379 zincrby website 0.01  "0.02" zinterstore dest nkeys key [key..] 计算给定的一个或多个有序集的交集并保存在新的有序集合dest中zlexcount key min max 在有序集合中计算指定字典区间内成员数量 需要清楚的是 可以使用-代表,得分最小的元素,使用+代表得分最大的元素 zlexcount key - + 得到就是集合的size min===[member1 max===[member2 得到的元素个数就是在区间[member1, member2]内的元素个数 redis ZADD myzset 1 a 2 b 3 c 4 d 5 e 6 f 7 g (integer) 7 redis zrange myzset 0 -1 1) "a" 2) "b" 3) "c" 4) "d" 5) "e" 6) "f" 7) "g" redis ZLEXCOUNT myzset - + (integer) 7 redis ZLEXCOUNT myzset [c + (integer) 5 redis ZLEXCOUNT myzset - [c (integer) 3 redis zrange key start stop [withscores] 通过索引区间返回有序集合成指定区间内的成员 特殊的一个写法zrange key 0 -1返回所有的元素zrangebylex key min max [limit offset count] 通过字典区间返回有序集合的成员zrangebyscore key min max [withscores] [limit] 通过分数返回有序集合指定区间内的成员zrank key member 返回有序集合中指定成员的索引zrem key member [member ...] 移除有序集合中的一个或多个成员 返回1,删除成功,返回0,没有这个元素zremrangebylex key min max 移除有序集合中给定的字典区间的所有成员zremrangebyrank key start stop 移除key中给定的排名区间的所有成员 排名就是索引zremrangebyscore key start stop 移除key中给定的分数区间的所有成员 分数就是scorezrevrange key start stop [withscores] 返回有序key中指定区间内的成员,通过索引,分数从高到低 和zrange key start stop反过来zrevrangebysocre key max min [withscores] 返回有序key中指定分数区间内的成员,通过索引,分数从高到低zrevrank key memeber 返回key中指定成员的排名,key成员按分数值递减排序zscore key member 返回key中member的分数zunionstore dest numkeys key [key...] 计算给定的一个或多个有序集的并集,并存储到新的dest中zscan key cursor [match pattern] [count count] 迭代有序集合中的元素(包括元素成员和元素分值) uplooking01:6379 zscan website 1 1) "0" 2) 1) "" 2) "0.0050000000000000001" 3) "" 4) "0.02" 5) "" 6) "0.050000000000000003" 7) "" 8) "1"

String(字符串)

string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。

string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象

string类型是Redis最基本的数据类型,一个键最大能存储512MB。

hash

zset(sorted set:有序集合)

Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

zset的成员是唯一的,但分数(score)却可以重复。

应用在高并发和实时请求的场景,eg新浪微博hash:关注列表,粉丝列表string:微博数,粉丝数sorted
set:TopN,热门微博还有github,stackoverflow也用到了redis

Set(集合)

Redis的Set是string类型的无序集合。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

Redis的配置文件位于Redis的安装目录之下,文件名为redis.conf。可以通过config命令来查看或设置配置项。

zadd 命令

添加元素到集合,元素在集合中存在则更新对应score

  1. zadd key score member

Redis的Set是string类型的无序集合。

sadd 命令

添加一个string元素到,key对应的set集合中,成功返回1,如果元素以及在集合中返回0,key对应的set不存在返回错误。

  1. sadd key member

查看 语法,Redis config命令格式如下: redis localost:6379 config get
config_set_name eg: redis localost:6379 config get loglevel 1)
“loglevel” 2) “notice” 使用*号获取所有配置项:redis localost:6379
config get *

编辑 可以通过修改redis.conf文件或使用config set命令来修改配置
基本语法: redis localost:6379 config set conf_setting_name
new_value eg: redis localost:6379 config set loglevel “warning” redis
localost:6379 config get loglevel 1) “loglevel” 2) “warning”
–对当前服务有效,之后当服务重启之后,才会失效Redis操作

实例

  1. redis 127.0.0.1:6379> HMSET
    user:1
    username shouce.ren password
    shouce.ren points 200
  2. OK
  3. redis 127.0.0.1:6379> HGETALL
    user:1
  4. 1) “username”
  5. 2) “shouce.ren”
  6. 3) “password”
  7. 4) “shouce.ren”
  8. 5) “points”
  9. 6) “200”
  10. redis 127.0.0.1:6379>

以上实例中 hash 数据类型存储了包含用户脚本信息的用户对象。
实例中我们使用了 Redis HMSET, HEGTALL 命令,user:1 为键值。

每个 hash 可以存储 232\ -\ 1 键值对(40多亿)。


Redis的优势

实例

  1. redis 127.0.0.1:6379> zadd
    shouce.ren 0
    redis
  2. (integer) 1
  3. redis 127.0.0.1:6379> zadd
    shouce.ren 0
    mongodb
  4. (integer) 1
  5. redis 127.0.0.1:6379> zadd
    shouce.ren 0
    rabitmq
  6. (integer) 1
  7. redis 127.0.0.1:6379> zadd
    shouce.ren 0
    rabitmq
  8. (integer) 0
  9. redis 127.0.0.1:6379>
    ZRANGEBYSCORE shouce.ren 0 1000
  10.  
  11. 1) “redis”
  12. 2) “mongodb”
  13. 3) “rabitmq”

Redis hash 是一个键值对集合。Redis
hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。实例redis
127.0.0.1:6379 HMSET w3ckey name “redis tutorial” description “redis
basic commands for caching” likes 20 visitors 23000OKredis
127.0.0.1:6379 HGETALL w3ckey1) “name”2) “redis tutorial”3)
“description”4) “redis basic commands for caching”5) “likes”6) “20”7)
“visitors”8) “23000”以上实例中 hash
数据类型存储了一些描述信息(name,description, likes,
visitors)到hash的w3ckey中。 使用hgetall
获取所有的内容。每个hash可以存储232-1键值对。

List(列表)

Redis
列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)。

注意:关于list的操作,可以分为从左边操作,也可以从右边进行操作l—left,r—-right

Redis 数据类型

启动服务

 


Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted
set:有序集合)。


Redis的特点

实例

  1. redis 127.0.0.1:6379> sadd
    shouce.ren
    redis
  2. (integer) 1
  3. redis 127.0.0.1:6379> sadd
    shouce.ren
    mongodb
  4. (integer) 1
  5. redis 127.0.0.1:6379> sadd
    shouce.ren
    rabitmq
  6. (integer) 1
  7. redis 127.0.0.1:6379> sadd
    shouce.ren
    rabitmq
  8. (integer) 0
  9. redis 127.0.0.1:6379> smembers
    shouce.ren
  10.  
  11. 1) “rabitmq”
  12. 2) “mongodb”
  13. 3) “redis”

注意:以上实例中 rabitmq
添加了两次,但根据集合内元素的唯一性,第二次插入的元素将被忽略。

集合中最大的成员数为 232\ -\ 1 (4294967295,
每个集合可存储40多亿个成员)。


blpop key1 [key2 ] timeout 移除并获取列表中的第一个元素,如果没有会阻塞列表直到超时 或发现可弹出元素为止 简言之就是删除key1 key2.。。中的元素,如果没有元素则阻塞,结束条件为 要么时间超过了timeout;要么发现有新的元素进来brpop key1 [key2 ] timeout 移除并获取列表中的最后一个元素,如果没有会阻塞列表直到超时或发现可弹出 元素为止 同blpop,不同在于删除元素的方向不一致brpoplpush source destination timeout 从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回 它,如果没有元素会阻塞列表知道等待超时或发现可弹出元素为止 uplooking01:6379 brpoplpush season season1 100 "spring" (7.59s)lindex key index 通过索引获取列表中的元素 注意一个: lindex key -1获取的是最后一个元素linsert key before|after pivot value 在列表的元素前或后插入元素 uplooking01:6379 lrange season 0 -1 1) "winter" 2) "autumn" 3) "summer" uplooking01:6379 linsert season after summer spring (integer) 4 uplooking01:6379 lrange season 0 -1 1) "winter" 2) "autumn" 3) "summer" 4) "spring"llen key 获取列表长度,列表大小lpop key 移出并获取列表的第一个元素lpush key value1 [value2] 将一个或多个值插入到列表头部lpushx key value 将一个或多个值插入到已存在的列表头部lrange key start stop 获取列表指定返回内的元素 [start, stop] 如果要出去lrange中的所有的元素的话 lrange key 0 -1lrem key count value 移出列表元素 count  0: 从头往尾移除值为 value 的元素,1时,表示移除1个元素 count  0: 从尾往头移除值为 value 的元素,-2时,表示移除2个元素 count = 0: 移除所有值为 value 的元素。lset key index value 通过索引设置列表元素的值(list.set(i, value)) 需要大家注意的是一个特殊的索引-1,表示最后一个元素ltrim key start stop 对一个列表进行修剪(trim),也就是说,让列表只保留指定区间内的元素, 删除其它元素 [start, stop] uplooking01:6379 lrange season 0 -1 1) "winter" 2) "autumn" 3) "summer" 4) "spring" uplooking01:6379 ltrim season 1 2 OK uplooking01:6379 lrange season 0 -1 1) "autumn" 2) "summer"rpop key 移出并获取列表最后一个元素rpoplpush source destination 移出列表的最后一个元素,并将该元素添加到另一列表并返回rpush key value1 [value2] 在列表中添加一个或多个值rpushx key value 为已存在的列表添加值

实例

  1. redis 127.0.0.1:6379> SET name
    “shouce.ren”
  2. OK
  3. redis 127.0.0.1:6379> GET
    name
  4. “shouce.ren”

在以上实例中我们使用了 Redis 的 SETGET 命令。键为
name,对应的值为shouce.ren。

注意:一个键最大能存储512MB。


关闭服务

make完成之后,在redis-3.2.0/src目录下会出现编译后的redis服务器程序redis-server,还有用于测试的客户端程序redis-cli。
redis-3.2.0]$ src/redis-server redis.conf 当然,如果再执行了make
install则会在指定安装目录下生成一个bin目录,同时也会有相关的命令用于操作Redis.

初始配置

hexists key field 查看hash表key中,指定字段是否存在 0表示没有,1表示有hget key field 获取hash表中指定字段的值hgetall key 获取所有的字段和值hincrby key field increment 为指定字段的整数值加上增量incrementhincrbyfloat key field increment 为指定字段的浮点值加上增量incrementhkeys key 获取所有的字段hlen key 获取key的字段的数量hdel key field2 [field2] 删除一个或多个哈是表字段hmget key field1 [field2] 获取所有给定字段的值hmset key f1 v1 [f2 v2] 同时将多个file-value设置到key中hset key field value 将哈希表key的field设置为valuehsetnx key field value 当在field不存在时,设置相关字段的值hvals key 获取所有的值hscan key cursor [MATCH pattern] [COUNT count] 迭代哈希表中的键值对

Redis配置查看

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部或者尾部。实例redis
127.0.0.1:6379 lpush redis.net.cn redis(integer) 1redis 127.0.0.1:6379
lpush redis.net.cn mongodb(integer) 2redis 127.0.0.1:6379 lpush
redis.net.cn rabitmq(integer) 3redis 127.0.0.1:6379 lrange redis.net.cn
0 101) “rabitmq”2) “mongodb”3) “redis”redis 127.0.0.1:6379列表最多可存储
232-1元素 (4294967295, 每个列表可存储40多亿)。

Redis
zset和set一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的,但分数(score)却可以重复。 zadd命令
添加元素到集合,元素在集合中存在则更新对应score zadd key score member
实例redis 127.0.0.1:6379 zadd redis.net.cn 0 redis(integer) 1redis
127.0.0.1:6379 zadd redis.net.cn 0 mongodb(integer) 1redis
127.0.0.1:6379 zadd redis.net.cn 0 rabitmq(integer) 1redis
127.0.0.1:6379 zadd redis.net.cn 0 rabitmq(integer) 0redis
127.0.0.1:6379 ZRANGEBYSCORE redis.net.cn 0 10001) “redis”2) “mongodb”3)
“rabitmq”

修个redis.conf中的配置项 bind uplooking01 daemonize yes logfile
/opt/redis-3.2.0/logs/redis.log(日志文件,目录必须存在)

zset

常见的string操作命令如下: