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

第一章

编译安装:

  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命令时间复杂度
命令 时间复杂度

通用部分

命令时间复杂度命令例子建议
delO(1)del keydel hello删除key
keysO(n)keys keykeys *不建议在生产环境使用
mgetO(n)mget keymget hello批量获取key
msetO(n)mset key valuemset hello word批量设置key
dbsizeO(1)dbsizedbsize计算数据库大小
existsO(1)exists keyexists hello判断key是否存在
expireO(1)exists keyexists hello设置key的过期时间
typeO(1)type keytype hello查看数据类型
ttlO(1)ttl keyttl hello查看数据过期时间
persistO(1)persist keypersist hello取消数据过期时间

字符串部分

命令时间复杂度命令例子建议
getO(1)get keyget hello获取值
setO(1)set key valueset hello word存储值
incrO(1)incr keyincr hellokey自增1,如果key不存在,自增后返回get(key) = 1
decrO(1)decr keydecr hellokey自减1,如果key不存在,自减后返回get(key) = -1
incrbyO(1)incrby key incrementincrby hello 10key 自增指定数值,如果key不存在,自增后返回get(key) = k
decrbyO(1)decrby key decrementdecrby hello 10key自减1,如果key不存在,自减后返回get(key) = k
setnxO(1)setnx helo valuesetnx hello1 defkey 不存在设置
set key value xxO(1)set key valye xxset hello wordabc xx可以存在才会设置
getsetO(1)getset key newValuegetset hello newwordset key newvalue 并返回旧的value
appendO(1)append key appendValueappend hello 123321将value追加到旧的value(返回value长度)
strlenO(1)strlen keystrlen hello返回字符串长度(注意中文)
incrbyfloatO(1)incrbyfloat key incrementincrbyfloat hello 1.23增加key对应的值
getrange key start endO(1)getrange key start endgetrange hello 1 2获取字符串指定下标的所有值
setranget key num valO(1)setrange key number newValuesetrange hello 1 ab给指定的下标设置一个新的值

哈希部分

命令时间复杂度命令例子建议
hgetO(1)hget key fieldhget hello word获取 hash key对应的filed的value
hsetO(1)hset key field valuehset hello word abc设置 hash key对应的filed的value
hdelO(1)hdel key fieldhdel hello php删除 hash key对应的filed的value
hexistsO(1)hexists key fieldhexists hello php判断 hash filed 是否存在
hlenO(1)hlen keyhlen hello返回hash key filed 数量
hmgetO(n)hmget key field [field …]hmget hello php java python批量获取 hash key的一批filed定义的值
hmsetO(n)hmset key field value [field value …]hmset hello php 1 java 2 python 3批量设置 hash key的一批filed定义的值
hincrbyO(n)hincrby key field incrementhincrby hello newphp 1hash key 自增指定数值,如果 hash key不存在,自增后返回hget(hash key) = k
hgetallO(n)hgetall keyhgetall hello返回hash key对应的所有filed 和value
hvalsO(n)hvals keyhvals hello返回hash key 对用的所有filed的value
hkeysO(n)hkeys keyhkeys hello返回hset 对应的所有filed
hsetnxO(1)hsetnx key field newValuehsetnx hello php1 123321设置hash key 对应的filed的value(如果值不存在则成功)

列表部分

命令时间复杂度命令例子建议
rpushO(1~n)rpush key valuerpush hello word从列表右端插入值(1~N个)
lpushO(1~n)lpush key valuelpush hello word从列表左端插入值(1~N个)
linsertO(n)linsert key befor/after value newValuelinsert mylist before word xxx linsert mylist after word xxx在list指定的值前 / 后插入newValue
lpopO(1)lpop keylpop mylist从列表左边弹出一个元素
rpopO(1)rpop keyrpop mylist从列表右边弹出一个元素
lremO(n)lrem key count valuelrem 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相等的项
ltrimO(n)ltrim mylist 0 1ltrim key start end按照索引范围修减列表
lrangeO(n)lrange key start end (包含end)lrange mylist 0 1获取列表指定索引范围所有item
lindexO(N)lindex key indexlindex mylist 2返回列表 key 中,下标为元素下标
llenO(1)llen keyllen mylist获取列表长度
lsetO(n)lset key index valuelset hello 1 xxx设置列表索引值为newValue 对头元素或尾元素进行操作,复杂度为 O(1)。其他情况下,为 O(N), N 为列表的长度。
blpopO(1)blpop key timeoutblpop mylist 1lpop阻塞版本,timeout 是阻塞超时时间,timeout=0为永不阻塞
brpopO(1)brpop key timeoutbrpop mylist 1lpop阻塞版本,timeout 是阻塞超时时间,timeout=0为永不阻塞 (从右侧获取)

集合部分

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

有序集合部分

命令时间复杂度命令例子建议
zaddO(logN)zadd key score memberzadd hello 1 abc添加score(可以重复) 和element(不可以重复)
zremO(1)zrem key memberzrem hello abc删除元素
zscoreO(1)zscore key memberzscore hello abc返回元素的分数
zincrbyO(1)zincrby key increment memberzincrby hello 1 word增加或减少元素的分数
zcardO(1)zcard keyzcard hello返回元素总格式
zrankO(1)zrank key memberzrank hello word返回当前元素在集合中的排名(升序)
zrangeO(log(n)+m)zrange key start stop [withscores]zrange hello 0 2返回指定索引范围内的升序元素[分值]
zrangebyscoreO(log(n)+m)zrangebyscore key min max [withscores]zrangebyscore hello 0 3返回指定分数范围内的升序元素[分值]
zcountO(log(n)+m)zcount key min maxzcount hello 0 2返回有序集合内在指定分数返回的元素个数
zremrangebyrankO(log(n)+m)zremrangebyrank key start stopzremrangebyrank hello 0 1删除指定排名内的升序元素
zremrangebyscoreO(log(n)+m)zremrangebyscore key min maxzremrangebyscore hello 0 1删除指定分数内的升序元素
zrevrankO(log(N))zrevrank key memberzrevrank hello word返回当前元素在集合中的排名(降序)
zrevrangeO(log(n)+m)zrevrange key start stopzrevrange hello 0 -1返回指定索引范围内的降序序元素[分值]
zrevrangebyscoreO(log(n)+m)zrevrangebyscore key max minzrevrangebyscore hello +inf -inf返回指定分数范围内的降序元素[分值]
zinterstoreO(NK)+O(Mlog(M))zinterstore destination numbers key [key …]zinterstore sum_point 2 mid_test fin_test返回多个集合的交集保存到新的集合中 数字为集合的数量
zunionstoreO(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 消息队列
    原文作者:銭兎孑
    原文地址: https://www.jianshu.com/p/dd6e5dfae929
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞