数据库Redis学习笔记(二)API通用结构 keys 键数 keys * 显示出所有键数 keys [pattern] keys 命令一般不再生产环境中使用 dbsize 计算key的总数 可在线上使用的 exists key名 判断是否存在 0不存在 1存在 del key名 [key名...] 0不存在 1成功 expire key seconds 设置过期时间 key在seconds秒作者王明昌发布时间2018-08-26最后更新2018-08-28文章目录通用结构数据类型通用结构keys 键数 keys * 显示出所有键数 keys [pattern] keys 命令一般不再生产环境中使用dbsize 计算key的总数 可在线上使用的exists key名 判断是否存在 0不存在 1存在del key名 [key名...] 0不存在 1成功expire key seconds 设置过期时间 key在seconds秒后过期 查询过期时间 ttl key 去掉过期时间 persist key 127.0.0.1:6379> set hello world OK 127.0.0.1:6379> expire hello 20 (integer) 1 127.0.0.1:6379> ttl hello (integer) 15 127.0.0.1:6379> get hello "world" 127.0.0.1:6379> ttl hello (integer) -2//过期 -1不存在过期时间 127.0.0.1:6379> get hello (nil) type key 类型数据类型数据结构与内部编码 单线程 类型字符串类型string复制value不能大于512m,最好不超过100k 场景: 缓存 计数器 分布式锁 命令: get set del --- incr key 自增1,如果key不存在,为1 decr key 自减1,如果key不存在,为-1 incrby key k 自增k,key不存在为k decr key k 自减k,key不存在则为-k --- set key value 不管key是否存在,都设置 setnx key value key不存在,才设置 set key value xx key存在,才设置 --- mget key1 key2 批量获取 mset key1 value2 key2 value 2 批量设置 n次get=n次网络时间+n次命令时间 1次mget = 1次网络时间+n次命令时间 --- getset key newvalue 设置新的value,并返回旧的value append key value 将value追加到旧的value strlen key 返回字符串的长度(注意中文) --- incrbyfloat key 3.5 增加key对应的值3.5 getrange key start end 获取字符串指定下标所有的值 setrange key index value 设置指定下标所有对应的值  实战 1.浏览量: incr userid:pageview(单线程无竞争)转化成json序列化 2.缓存视频的基本信息(数据源在数据库伪代码)  3.分布式id计数器 哈希类型hash 相当于小的redis  复制命令: hget key field 获取hash key对应的field的value hset key field value 设置hash key 对应field的value hdel key field 删除hash key对应field的value 例: hset user:1:info age 23 hget user:1:info age hgetall user:1:info hdel user:1:info age --- hexists key field 判断hash key 是否有field hlen key 获取hash key field的数量 例: hexists user:1:info name hlen user:1:info --- hmget key field1 field2 批量获取field的值 hmset key field1 value1 field2 value2 例: hmset user:2:info age 30 name xx hget user:2:info age name --- hgetall key o(n) 返回hash key所对应的field和value hvals key o(n) 返回hash key所对应的field和value hkeys key o(n) 返回hash key所对应的field 例: hgetall user:2:info --- hsetnx key field value 设置hash key 对应field的value(如果field已经存在,则失败) hincrby key field intCounter hash key对应的field的val自增intCounter hincrbyfloat key field floatCounter 自增浮点数  实战: 1.用户的访问量 hincrby user:1:info pageview count 2.缓存视频的基本信息  列表类型list 特点: 有序 可重复 左右两边插入弹出 命令: 插 rpush key value1 value2... o(n) 从列表的右端插入值 lpush key value1 value2... o(n) 左端 linsert key before|after vlaue newValue o(n) 在list指定的值前|后插入newValue 删 lpop key o(1) 从左边弹出一个 rpop key o(1) 从右边弹出一个  ltrim key start end o(n) 按照索引范围修剪列表 ltrim key 1 5 查 lrange key start end (包含end) o(n) 获取列表指定索引范围的所有item 右->左 -1--- lindex key index o(n) 获取列表指定索引的item llen key o(1) 获取列表长度 改 lset key index newValue o(n) 设置列表指定索引值为newValue  blpop key timeout o(1) lpop阻塞版本,timeout是阻塞超时时间,0为永不堵塞 brpop key timeout 实战: 1.微博列表 tip 1. lpush+lpop = stack 2. lpush+rpop = queue 3. lpush+ltrim = capped collection 4. lpush + brpop = message queue 集合类型set 特点: 无序/无重复/集合间的操作 sinter 两者的相同 sdiff 两者的不同 sunion 两者的全部 命令: 添加 sadd key element o(1) 向集合key中添加element(如果element已存在,添加失败) 删除 srem key element o(1) 将集合中element移除 scard user:1:follow (= 4) 计算集合的大小 sismember user:1:follow it (= 1(存在)) 判断it是否在集合中 srandmember user:1:follow count (= his) 从集合中挑选count个元素 spop user:1:follow (= sports) 从集合中随机弹出一个元素 smembers user:1:follow (= music his it) 获取集合中所有元素 ---  集合间的命令 sdiff user:1:follow user :2:follow 差集 sinter user:1:follow user :2:follow 交集 sunion user:1:follow user :2:follow 并集 sdiff|sinter|sunion + store destkey... 将差交并的结果保存到destkey中  实战: 抽奖 有序集合类型zset  命令: score可重复/element不能重复 添加 zadd key score element(可以是多对) o(logN) 添加score 和element 删除 zrem key element(可以是多对) o(1) 删除元素 zscore key element o(1) 返回元素的分数 zincrby key increScore element 增加或减少元素的分数 zincrby user:1:ranking 9 mike zcard key o(1) 返回元素的个数  zrange key start end [WITHSCORES] o(log(n)+m) 返回指定索引范围内的升序元素[分值] n,总的个数 m,统计的个数 zrange user:1:ranking 1 3 withscores       实战: 排行榜
2018-06-30电商数据库设计及架构优化1(数据库开发规范)### 数据库规范 数据库命名规范 所有数据库对象名称必须使用**小写**并且用下划线分割 数据库名称禁止使用数据库关键字(关键字需要使用反向单引号区分) 数据库命名最好见名知意,最好不要超32字符
2018-03-14MySQL数据库优化(总结) 1. 表的设计要符合3NF即可(设计范式) 设计范式(6NF) 关系型数据库(mysql , oracle , sql server , db2) 非关系型数据库:mogoDB , Redis 一般
2018-04-08sql注入学习笔记(基础)1.什么是sql注入 sql注入是将sql代码添加到输入参数.传递到服务器解析并执行的一种攻击手段 产生原因: 开发人员无法保证所有代码都进行过滤 攻击者发送给服务器的经过构造的可执行的sql语句 数
2018-08-26Redis学习笔记(一)初识Redis Redis 是什么 开源 基于键值的存储服务系统 支持多种数据结构 高性能/功能丰富 key-value 数据结构 字符串/哈希/列表/集合/有序集合 特性 速度快 10w OPS 存