美文网首页程序员
Redis从入门到高可用,分布式实践

Redis从入门到高可用,分布式实践

作者: 銭兎孑 | 来源:发表于2018-06-07 17:05 被阅读31次

第一章

编译安装:

  wget  http://dowmload.redis.io/releases/redis-3.0.7.tar.gz  下载redis包
  tar -xvf redis-3.0.7.tar.gz  解压
  cd redis-3.0.7
  make && make install  编译安装
      |- /usr/local/bin 下生成可执行文件

启动方式1

  redis-server   默认启动 (在6379端口  会走默认配置文件  不推荐)

启动方式2

  redis-server --port 6380 动态启动 ( 指定redis 在某个端口启动 -- port 指定端口  不推荐) 

启动方式3

  redis-server /usr/local/bin/redis.conf (启动redis 并指定配置文件  推荐 配置项见附录1)

第二章

Redis API的使用和理解
type 的返回值
- string 字符串
- hash 哈希
- list 列表
- set 集合
- zset 有序集合
- none (key不存在)

附录1
redis配置项
daemonize yes/no 是否以守护进程方式启动 推荐yes 默认为no
port
6379 指定redis在哪个端口启动
dir /usr/local/var/db/redis/ redis工作目录

附录2
redis命令时间复杂度
命令 时间复杂度

通用部分

命令 时间复杂度 命令 例子 建议
del O(1) del key del hello 删除key
keys O(n) keys key keys * 不建议在生产环境使用
mget O(n) mget key mget hello 批量获取key
mset O(n) mset key value mset hello word 批量设置key
dbsize O(1) dbsize dbsize 计算数据库大小
exists O(1) exists key exists hello 判断key是否存在
expire O(1) exists key exists hello 设置key的过期时间
type O(1) type key type hello 查看数据类型
ttl O(1) ttl key ttl hello 查看数据过期时间
persist O(1) persist key persist hello 取消数据过期时间

字符串部分

命令 时间复杂度 命令 例子 建议
get O(1) get key get hello 获取值
set O(1) set key value set hello word 存储值
incr O(1) incr key incr hello key自增1,如果key不存在,自增后返回get(key) = 1
decr O(1) decr key decr hello key自减1,如果key不存在,自减后返回get(key) = -1
incrby O(1) incrby key increment incrby hello 10 key 自增指定数值,如果key不存在,自增后返回get(key) = k
decrby O(1) decrby key decrement decrby hello 10 key自减1,如果key不存在,自减后返回get(key) = k
setnx O(1) setnx helo value setnx hello1 def key 不存在设置
set key value xx O(1) set key valye xx set hello wordabc xx 可以存在才会设置
getset O(1) getset key newValue getset hello newword set key newvalue 并返回旧的value
append O(1) append key appendValue append hello 123321 将value追加到旧的value(返回value长度)
strlen O(1) strlen key strlen hello 返回字符串长度(注意中文)
incrbyfloat O(1) incrbyfloat key increment incrbyfloat hello 1.23 增加key对应的值
getrange key start end O(1) getrange key start end getrange hello 1 2 获取字符串指定下标的所有值
setranget key num val O(1) setrange key number newValue setrange hello 1 ab 给指定的下标设置一个新的值

哈希部分

命令 时间复杂度 命令 例子 建议
hget O(1) hget key field hget hello word 获取 hash key对应的filed的value
hset O(1) hset key field value hset hello word abc 设置 hash key对应的filed的value
hdel O(1) hdel key field hdel hello php 删除 hash key对应的filed的value
hexists O(1) hexists key field hexists hello php 判断 hash filed 是否存在
hlen O(1) hlen key hlen hello 返回hash key filed 数量
hmget O(n) hmget key field [field ...] hmget hello php java python 批量获取 hash key的一批filed定义的值
hmset O(n) hmset key field value [field value ...] hmset hello php 1 java 2 python 3 批量设置 hash key的一批filed定义的值
hincrby O(n) hincrby key field increment hincrby hello newphp 1 hash key 自增指定数值,如果 hash key不存在,自增后返回hget(hash key) = k
hgetall O(n) hgetall key hgetall hello 返回hash key对应的所有filed 和value
hvals O(n) hvals key hvals hello 返回hash key 对用的所有filed的value
hkeys O(n) hkeys key hkeys hello 返回hset 对应的所有filed
hsetnx O(1) hsetnx key field newValue hsetnx hello php1 123321 设置hash key 对应的filed的value(如果值不存在则成功)

列表部分

命令 时间复杂度 命令 例子 建议
rpush O(1~n) rpush key value rpush hello word 从列表右端插入值(1~N个)
lpush O(1~n) lpush key value lpush hello word 从列表左端插入值(1~N个)
linsert O(n) linsert key befor/after value newValue linsert mylist before word xxx linsert mylist after word xxx 在list指定的值前 / 后插入newValue
lpop O(1) lpop key lpop mylist 从列表左边弹出一个元素
rpop O(1) rpop key rpop mylist 从列表右边弹出一个元素
lrem O(n) lrem key count value lrem mylist 1 word
lrem mylist -1 word
lrem mylist 0 word
从列表左边删除一个元素
根据count的值,从列表中删除所有value相等的值
(1) count > 0 , 从左向右,删除最多count个value相等的项
(2) count < 0 , 从右向左,删除最多Math().abc(count)个value相等的项
(3) count = 0 , 删除所有value相等的项
ltrim O(n) ltrim mylist 0 1 ltrim key start end 按照索引范围修减列表
lrange O(n) lrange key start end (包含end) lrange mylist 0 1 获取列表指定索引范围所有item
lindex O(N) lindex key index lindex mylist 2 返回列表 key 中,下标为元素下标
llen O(1) llen key llen mylist 获取列表长度
lset O(n) lset key index value lset hello 1 xxx 设置列表索引值为newValue 对头元素或尾元素进行操作,复杂度为 O(1)。其他情况下,为 O(N), N 为列表的长度。
blpop O(1) blpop key timeout blpop mylist 1 lpop阻塞版本,timeout 是阻塞超时时间,timeout=0为永不阻塞
brpop O(1) brpop key timeout brpop mylist 1 lpop阻塞版本,timeout 是阻塞超时时间,timeout=0为永不阻塞 (从右侧获取)

集合部分

命令 时间复杂度 命令 例子 建议
sadd key element O(1) sadd key value [value ...] sadd hello 1 2 3 向集合key添加element(如果element已经存在 ,添加失败)
srem key element O(1) srem key member srem hello 1 将集合key中的element移除掉
scard key O(1) scard key scard hello 计算集合大小
sismember key element O(1) sismember key member sismember hello 2 判断element 是否在集合中
srandmember key count O(1) srandmember key member srandmember hello 2 从集合中随机挑选count个元素
spop key O(1) spop key spop hello 从集合中随机弹出一个数据
smembers O(n) smembers key smembers hello 返回集合中所有元素
sdiff O(N) sdiff key value sdiff hello word 返回一个包含差集成员的列表
sinter O(n * m) sinter key value sinter hello word 返回一个包含交集成员的列表
sunion O(n) sunion key value sunion hello word 返回一个包含并集成员的列表
sdiffstore O(n) sdiffstore destination key [key ...] sdiffstore diffarray abc abc1 将两个集合的差集保存到一个新的集合中
sinterstore O(n * m) sinterstore destination key [key ....] sinterstore sinterarray abc abc1 将两个集合的交集保存到一个新的集合中
sunionstore O(n) sunionstore destination key [key ...] sunionstore sunionarray abc abc1 将两个集合的并集保存到一个新的集合中

有序集合部分

命令 时间复杂度 命令 例子 建议
zadd O(logN) zadd key score member zadd hello 1 abc 添加score(可以重复) 和element(不可以重复)
zrem O(1) zrem key member zrem hello abc 删除元素
zscore O(1) zscore key member zscore hello abc 返回元素的分数
zincrby O(1) zincrby key increment member zincrby hello 1 word 增加或减少元素的分数
zcard O(1) zcard key zcard hello 返回元素总格式
zrank O(1) zrank key member zrank hello word 返回当前元素在集合中的排名(升序)
zrange O(log(n)+m) zrange key start stop [withscores] zrange hello 0 2 返回指定索引范围内的升序元素[分值]
zrangebyscore O(log(n)+m) zrangebyscore key min max [withscores] zrangebyscore hello 0 3 返回指定分数范围内的升序元素[分值]
zcount O(log(n)+m) zcount key min max zcount hello 0 2 返回有序集合内在指定分数返回的元素个数
zremrangebyrank O(log(n)+m) zremrangebyrank key start stop zremrangebyrank hello 0 1 删除指定排名内的升序元素
zremrangebyscore O(log(n)+m) zremrangebyscore key min max zremrangebyscore hello 0 1 删除指定分数内的升序元素
zrevrank O(log(N)) zrevrank key member zrevrank hello word 返回当前元素在集合中的排名(降序)
zrevrange O(log(n)+m) zrevrange key start stop zrevrange hello 0 -1 返回指定索引范围内的降序序元素[分值]
zrevrangebyscore O(log(n)+m) zrevrangebyscore key max min zrevrangebyscore hello +inf -inf 返回指定分数范围内的降序元素[分值]
zinterstore O(NK)+O(Mlog(M)) zinterstore destination numbers key [key ...] zinterstore sum_point 2 mid_test fin_test 返回多个集合的交集保存到新的集合中 数字为集合的数量
zunionstore O(NK)+O(Mlog(M)) zunionstore destination numbers key [key ...] zunionstore sum_point 2 mid_test fin_test 返回多个集合的并集保存到新的集合中 数字为集合的数量

一些对比

集合 对比 有序集合
无重复元素 <一> 无重复元素
无序 <一> 有序
element <一> element+store
列表 对比 有序集合
可以重复元素 <一> 无重复元素
有序 <一> 有序
element <一> element+store

附录3
tips

  1. lpush + lpop = stack 站
  2. lpush + rpop = queue 队列
  3. lpush + ltrim = capped collection 固定数量列表
  4. lpush + brpop = message queue 消息队列

相关文章

网友评论

    本文标题:Redis从入门到高可用,分布式实践

    本文链接:https://www.haomeiwen.com/subject/mfngsftx.html