Redis:Remote Dictionary Server:
- 特点:
- key-value数据库C语言基于内存可以持久化免费开源
- 内存存储:高速可持久化:RDB&AOF发布订阅系统地图信息分析计数器、计时器(微信微博浏览量)
- 集群事务
redis-cli # 使用redis-cli连接redis服务 redis-server # 启动服务 ping # ping,成功返回PONG
set key value get key # 获取key所对应的值 move key database # 移除 database 中的key expire key time # 设置key的生命周期 ttl key # 查看可用的剩余时间 keys * # 查看所有key,空时返回 (empty list or set) EXISTS key # 判断key是否存在,存在返回1,不存在返回0
redis-benchmark # 压力测试工具
数据库Redis 是单线程的
Redis基于内存操作,CPU不是性能瓶颈,而内存带宽是瓶颈
# redis 内置16个数据库 select index # 选择第index个数据库,redis一共有16个数据库,可以在redis.conf中看到 DBSIZE # 查看当前数据库大小 FLUSHDB # 清空当前数据库 FLUSHALL # 清空所有数据库基本数据类型 五大数据类型 String
APPEND key value # 将value附加到key对应的字符串中,返回字符串的长度 Notice:若可以不存在,等价于set
STRLEN key # 获取字符串的长度
SETEX key expire value # 设置key值为value,expire秒后过期, 若key已存在则覆盖
SETNX key expire value # 设置key值为value,expire秒后过期, 若key已存在则不操作
############################ Interger ###########################################
INCR key # key对应的字符串自增
DECR key # key对应的字符串自减
INCRBY key increment # key对应的字符串自增increment
DECRBY key decrement # key对应的字符串自减decrement
########################### String ###############################################
GETRANGE key start end # 获取key对应字符串[start,end]的字符串
### Notice: GETRANGE key 0 -1 等价于 get key
SETRANGE key offset value # 替换key对应的字符串,从offset开始,值为value
############################### 批量操作 ###########################################
MSET k1 v1 k2 v2 ... # 批量设置 (k1,k2)
MGET k1 k2 k3 # 批量获取 (k1,k2,k3)
MSETNX k1 v1 k2 v2 ... # 批量设置,有一个失败则全部失败 (原子性操作)
################################# 对象 ############################################
set user "{"name":name,"age":age}"# 设置 value 为一个json对象
mset user:name name user:age age # 将key链式表示成对象成员
getset key value # 组合命令: 先get再set
#################################### 应用场景 ###################################
* 计数器
* 统计多单位数量
* 对象缓存
List
######################################## 增 ######################################## LPUSH key values... # 将values push到 key对应的list的头部中 RPUSH key values... # 将value push到 key对应的list的尾部中 LINSERT pivot BEFORE|AFTER value # pivot对应的值前(后)插入value,成功返回长度,失败返回-1 ######################################## 查 ######################################## LRANGE key start end # 获取start 到 end的值,负数代表从右往左数 LINDEX key index # 获取list index索引对应的值,同python list一样,负数代表从后往前 LTRIM key start stop # 截取key中start 到 stop中的内容 LLEN list # 获取list的长度 ######################################## 删 ######################################## LPOP key # 移除list左侧元素 RPOP key # 移除list右侧元素 LREM key count value # 删除list中等于value的元素count个,返回实际删除的数量 ######################################## 改 ######################################## LSET key index value # 相当于 key[index]=value ######################################## 组合命令 ######################################## RPOPLPUSH list1 list2 将list1的末尾移动到list2的首部Set
Notice:
- Set 中的元素不能重复
######################################## 增 ######################################## SADD key values... # 将values全部加入key中 ######################################## 查 ######################################## SMEMBERS key # 获取key的所有成员 SISMEMBER key value # 判断value是否在key中 SCARD key # 获取key中的元素个数 ######################################## 删 ######################################## SREM key values... # 移除key中的values成员,返回移除元素的数量 SPOP key [count] # 随机移除key中的count个成员 ######################################## 改 ######################################## ######################################## 组合命令 ######################################## SMOVE source destination value # 将source的value移动到destination中 ######################################## 集合运算 ################################# SDIFF key1 key2 # 计算 key1 与 key2的差集 SINTER key1 key2 # 计算key1 与 key2的交集 SUNIOn key1 key2 # 计算key1 与 key2的并集 ######################################## 其他命令 ######################################## SRANDMEMBER key [count] # 随机输出key中count个成员Hash
######################################## 增 ######################################## HSET key field value # 相当于key[field]=value ######################################## 查 ######################################## HGET key feild # 相当于get key[feild] HMGET key feilds... # 获取多个feild的值 HLEN key # 获取key的长度 HEXISTS key feild # 判断key中的feild是否存在 HKEYS key # 相当于python key.keys() HVALS key # 相当于python key.values() ######################################## 删 ######################################## HDEL key feilds... # 删除feilds中feild的值 ######################################## 改 ######################################## HSET key field value # 相当于key[field]=value HMSET keyZset... # 多重设置和修改 ######################################## 组合命令 ######################################## HINCRBY key feild increment # 相当于python key[feild] += increment, increment 可以为复数 HSETNX key feild value # 若存在则key[feild]=value,若不存在则不操作
######################################## 增 ######################################## ZADD key特殊数据类型 geospatial... # 将所有的 添加到key中 ######################################## 查 ######################################## ZRANGE key start stop # 查询start stop间key的member ZREVRANGE key start stop # 查询start stop间key的member,但结果翻转 ZRANGEBYSCORE key min max [WITHSCORES] [limit offset count] # 查询,结果按照min-max排序,若带有WITHSCORE则显示成绩,后面还可以分页查询 ZREVRANGEBYSCORE key min max [WITHSCORES] [limit offset count] # 查询,结果按照min-max排序,若带有WITHSCORE则显示成绩,后面还可以分页查询, 但结果翻转 ZCARD key # 查询key的长度 ZCOUNT key min max # 查询min到max之间的member数 ######################################## 删 ######################################## ZREM key member... # 删除key中的所有member
Notice:
- 本质上使用zset,可以使用zset的操作符操作 如使用zrange查看所有member
######################################## 增 ######################################## GEOADD key longitude latitude member # 将经度longitude纬度latitude的member城市添加到key当中 ######################################## 查 ######################################## GEOPOS key members... # 获取key中member市(s)的经纬度 GEODIST key member1 member2 [unit] # 获取key中member1和member2之间的距离,以unit的单位返回,默认为米 GEODIST key longitude latitude radius [unit] # 获取key中,距离(longitude,latitude)radius unit单位的member GEORADIUSBMEMBER key member radius [unit] # 获取key中,距离member radius unit单位的所有member GEOHASH key members... # 返回key中member(s)的hash,本质是将经纬度转化成了hash字符串,但丢失了一定经度Hyperloglog
Notice:
- hyperloglog非常节省内存有一定错误率
######################################## 增 ######################################## PFADD key elements... # 插入element(s) ######################################## 查 ######################################## PFCOUNT key # 查询key的长度 ######################################## 其他 ######################################## PFMERGE destination sources... # 将source(s)并到destination中Bitmap
######################################## 增 ######################################## SETBIT key offset value # key[offset]=value ######################################## 查 ######################################## GETBIT key offset # 查询key[offset] BITCOUNT key # 查询key中1的个数事务
Notices::
- Redis单条命令保证原子性,但事务不保证原子性若发生编译时异常,则事务的所有命令都不会执行若发生运行时异常,只有异常命令抛出异常,而正常命令依旧执行
MULTI # 开启事务 命令入队 # redis会返回QUEUED EXEC # 执行事务 DISCARD # 放弃事务应用 实现乐观锁
WATCH keys... # 监视key(s) UNWATCH keys... # 停止监视key(s)Jedis 发布订阅
SUBSCRIBE channel # 订阅channel,持续接受channel发出的消息 PUBLIC channel message # 在channel上发送message配置文件
Notices:
- 配置文件对大小写不敏感
######################################## 网络配置 ######################################## bind 127.0.0.1 # 绑定的ip protected-mode yes # 是否受保护 port 6379 # 绑定端口号 ######################################## 通用配置 ######################################## daemonize yes # 是否以守护进程运行 pidfile /car/run/redis_6379.pid # pid配置文件 # debug # verbose, many info, but not a mess like the debug level # notice # warning loglevel notice logfile "" # 日志文件名,为空则为stdout database 16 # 数据库数量 always-show-logo yes # 是否显示logo ######################################## 快照 ######################################## save 900 1 # 900内至少有1个key修改则进行持久化操作 save 300 10 # 300内至少有10个key修改则进行持久化操作 save 60 10000 stop-writes-on-bgsave-error yes # 如果持久化出错,是否还要继续工作 rdbcompression yes # 是否要压缩rdb持久化文件 rdbchecksum yes # 保存rdb文件的时候是否校验持久化文件 dir ./ # rdb文件的保存目录 ######################################## AOF ######################################## appendonly no # 开启aof模式 appendfilename "appendonly.aof" # 持久化文件名 appendfsync everysec # 每秒同步一次,always:每次修改都同步,no:不同步 ######################################## 复制 ######################################## ######################################## 限制 ######################################## maxclients 100000 # 最大客户端数量 maxmemory持久化 RDB AOF 主从复制# 最大内存配置 maxmemory-policy # 内存到达上限的处理策略
Notice:
- 从机不能写,只有主机能写
SLAVEOF ip port # 配置当前redis服务器为ip@port的redis服务器的从机 SLAVEOF no one # 配置当前redis服务器为主机复制方式
- 第一次连接会进行全量同步全量同步:slave服务在接受到数据库文件后,将其存盘并加载到内存中增量同步:master依次将修改命令传输到slave,完成同步
Notices:
- 哨兵还需要监视其他哨兵是否正常工作,所以是多哨兵模式
过程:
- 哨兵1检测到主服务器不可用,标记为主观下线发现的哨兵数量达到一定值后,哨兵之间会进行一次投票,之后将从机升级成主机当主机回归,归并到新主机下,成为从机



