Redis 第一天
[TOC]
Redis的介绍
-
Redis的定义
-
Redis是开源的、遵守BSD协议
-
Redis是一个高性能的key-value存储系统
-
Redis和Memcached类似
-
Redis支持存储的value类型相对更多
-
Redis的数据类型
数据类型名称 数据名称英文 字符串 string 链表 list 集合 set 有序集合 zset 哈希 hashs
-
-
Redis的作用
- Redis 是一个高性能的key-value数据库。
- Redis的出现,很大程度补偿了memcached这类key/value存储的不足。
- 在部分场合可以对关系数据库起到很好的补充作用。
- 它提供了Python,Ruby,Erlang,PHP客户端,使用很方便。
- 目前最新版本3.6.0
-
Redis的特点
- 持久性
- Redis支持数据的持久化
- 可以将内存中的数据保存在磁盘中
- 重启的时候可以再次加载进行使用
- 多样性
- Redis不仅仅支持简单的key-value类型的数据
- 同时还提供list,set,zset,hash等数据结构的存储
- 安全性
- Redis支持数据的备份
- 即master-slave模式的数据备份
- 持久性
-
Redis的别名
- 数据结构服务器
- Redis 是完全开源免费的,遵守BSD协议,先进的key-value持久化产品
- 内存级数据库
- 一个基于内存的网络存储系统
- 远程字典服务器
- Remote Dictionary Server
- 数据结构服务器
-
Redis的适用场景
- 取最新 N 个数据的操作
- 排行榜应用,取 TOP N 操作
- 需要精准设定过期时间的应用
- 计数器应用
- Uniq 操作,获取某段时间所有数据排重值
- 实时系统,反垃圾系统
- Pub/Sub 构建实时消息系统
- 构建队列系统
- 缓存
-
Redis的优势
- 性能极高
- Redis能读的速度是110000次/s
- 写的速度是81000次/s
- 丰富的数据类型
- Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作
- 原子
- Redis的所有操作都是原子性的
- Redis还支持对几个操作全并后的原子性执行
- 丰富的特性
- Redis还支持 publish/subscribe, 通知, key 过期等等特性
- 性能极高
-
Redis的竞争区别
- Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。
- Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。
- Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,
- 因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,
- 在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。
- 同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。
Redis的安装
- Linux下的ubuntu下的Redis的安装
- apt-get源安装
- $sudo apt-get update
- $sudo apt-get install redis-server
- 启动Redis
- $ redis-server
- 查看redis是否启动
- $ redis-cli
- Redis中测试
- PING
- PONG则代表安装成功
- PING
- apt-get源安装
- Windows下的Redis的安装
- 在浏览器访问地址
- github.com/MSOpenTech/…
- 下载完成后解压,将文件夹重新命名问Redis
- 打开CMD窗口
- 使用CD命令进入Redis目录
- 运行代码
- redis-server.exe redis.windows.conf
- 打开一个新的CMD窗口
- 原先的窗口不要关,不然无法访问服务端
- 切换到Redis目录
- 运行代码
- redis-cli.exe -h 127.0.0.1 -p 6379
- 在浏览器访问地址
Redis的数据类型
命令中的NX表示如果 Key不存在就添加
存在则直接返回失败
用于方式覆盖
String( 字符串 )
- String的简介
- String是最简单的类型,一个Key对应一个Value。
- String类型是二进制的。
- String可以包含任何数据,比如jpg图片或者序列化的对象。
- 设置( 添加 )键值对( SET )
- set 键的名称 该键对应的值
- set Key Value
- 设置一个键和值,键存在则覆盖,返回ok
- set 键的名称 该键对应的值
- 查看键值对( GET )
- get 键的名称
- get Key
- 返回一个键的值
- get 键的名称
- 设置( 添加 )键值对( SETNX )
- setnx 键的名称 该键对应的值
- setnx Key Value
- 只有当该键不存在时设置一个键的值
- 若键已存在则返回0表示失败( 防止覆盖 )
- setnx 键的名称 该键对应的值
- 设置( 添加 )一个有过期时间的键值对 ( SETEX )
- setex 键的名称 有效的时间 该键对应的值
- setex Key time Value
- setex 键的名称 有效的时间 该键对应的值
- 查看键值对剩余存在时间( TTL )
- ttl 键的名称
- ttl Key
- 以秒为单位,返回给定键的剩余生存时间
- 当键不存在时,返回 -2 。
- 当键存在但没有设置剩余生存时间时,返回 -1 。
- ttl 键的名称
- 替换字符串( SETRANGE )
- setrange 键的名称 指定要被替换的字串的位置 要替换的字串
- setrange Key num string
- 指定要被替换的字串的位置从0开始
- 替换字符串( 半覆盖 )
- 替换长度由字串长度决定
- abcdefg从c开始替换bad,结果为abbadfg
- setrange 键的名称 指定要被替换的字串的位置 要替换的字串
- 批量设置( 添加 )键值对( MSET )
- mset 键1 值1 键2 值2 键3 值3
- mset V1 K1 V2 K2 V3 K3
- 批量设置键和值
- 成功则返回ok
- mset 键1 值1 键2 值2 键3 值3
- 批量获取( MGET )
- mget 键1 键2 键3
- mget k1 k2 k3
- 批量获取指定键的值
- mget 键1 键2 键3
- 批量设置( 添加 )键值对( MSETNX )
- msetnx 键1 值1 键2 值2 键3 值3
- msetnx K1 V1 K2 V2 K3 V3
- 批量设置不存在的键和值
- 当键不存在时候才成功
- 成功则返回OK
- 当被设置的键已存在时,该设置全部不成功
- msetnx 键1 值1 键2 值2 键3 值3
- 查看并更改键值对的值( GETSET )
- getset 键的名称 该键对应的值
- getset Key Value
- 获取原值,并设置新值
- getset 键的名称 该键对应的值
- 获取指定键值对的值( GETRANGE )
- getrange 键的名称 开始的位置 结束的位置
- getrange Key Start End
- 获取指定范围的值( 获取指定Start到End位置上的值 )
- 字符串位置从0开始计算
- getrange 键的名称 开始的位置 结束的位置
- 给键值对的值做+1( INCR )
- incr 键的名称
- incr Key
- 指定键的值做加1操作
- 值必须为数字
- 返回加后的结果
- incr 键的名称
- 给键值对的值做+n( INCRBY )
- incrby 键的名称 增加的数字
- incrby Key num
- 指定键的值做加num操作
- 值必须为数字
- 返回加后的结果
- 键不存在时候会设置键
- num可以是正整数或负整数
- incrby 键的名称 增加的数字
- 给键值对的值做-1( DECR )
- decr 键的名称
- decr Key
- 指定键的值做减1操作
- 值必须为数字
- 返回减后的结果
- decr 键的名称
- 给键值对的值做-n( DECRBY )
- decrby 键的名称 要减的数字
- decrby Key num
- 指定键的值做加num操作
- 值必须为数字
- 返回减后的结果
- 键值对不存在时候会设置键值对
- num可以是正整数或负整数
- decrby 键的名称 要减的数字
- 追加键值对的值( APPEND )
- append 键的名称 要追加的字符串
- append Key String
- 给指定键的值追加字符串
- 返回新值的长度
- append 键的名称 要追加的字符串
- 获取键的长度( STRLEN )
- strlen 键的名称
- strlen Key
- 获取一个键长度
- 返回长度
- strlen 键的名称
hashs( 哈希 )
- 哈希与字符串的区别
- String( 字符串 )
- 所有的值(可以是任何数据类型)都保存在一个键当中
- 放在一个内存块中
- Hashs( 哈希 )
- 所有的值也都保存在一个键当中
- 放在不同的内存块中
- 每个块称作字段
- String( 字符串 )
- 设置( 添加 )一个键值对( HSET )
- hset 键的名称 字段名 该字段的值
- hset Key Field Value
- 设置一个键,在键中保存字段和值
- hset 键的名称 字段名 该字段的值
- 设置( 添加 )一个键值对( HSETNX )
- hsetnx 键的名称 字段名 该字段的值
- hsetnx Key Field Value
- 设置一个键中不存在的字段和值
- 字段存在则报错
- 成功返回1
- 失败返回0
- hsetnx 键的名称 字段名 该字段的值
- 批量设置键值对中字段的值( HMSET )
- hmset 键的名称 字段名 该字段的值 字段名 该字段的值 字段名 该字段的值
- hmset Key Field1 Value1 Field2 Value2 Field3 Value3
- 在一个键中,批量设置字段
- hmset 键的名称 字段名 该字段的值 字段名 该字段的值 字段名 该字段的值
- 获取指定键的指定字段的值( HGET )
- hget 键的名称 字段名
- hget Key Field
- 获取键中的一个指定字段的值
- hget 键的名称 字段名
- 获取指定键的多个指定字段的值( HMGET )
- hmget 键的名称 字段名1 字段名2 字段名3
- hmget Key Field1 Field2 Field3
- 获取键中一个或多个字段的值
- hmget 键的名称 字段名1 字段名2 字段名3
- 判断字段是否在键中( HEXISTS )
- hexists 键的名称 字段名
- hexists Key Field
- 判断指定的字段是否存在于键中
- 存在返回1
- 不存在返回0
- hexists 键的名称 字段名
- 获取指定键的字段数量( HLEN )
- hlen 键的名称
- hlen Key
- 返回指定键的字段的数量
- hlen 键的名称
- 获取键中所有的字段名( HKEYS )
- hkeys 键的名称
- hkeys Key
- 获取键中的所有字段名
- 返回指定键所有的字段名
- hkeys 键的名称
- 获取键中所有的字段值( HVALS )
- hvals 键的名称
- hvals Key
- 获取键中的所有字段值
- 返回指定键所有的字段值
- hvals 键的名称
- 获取键中的所有的字段名和字段值( HGETALL )
- hgetall 键的名称
- hgetall Key
- 获取键中的所有字段和值
- hgetall 键的名称
- 给键中指定字段值做+n( HINCRBY )
- hincrby 键的名称 字段名 要加的值
- hincrby Key Field num
- 将键中指定字段的值,增加指定的数字
- 字段值必须为数字
- hincrby 键的名称 字段名 要加的值
- 删除一个或多个字段( HDEL )
- hdel 键的名称 字段名1 字段名2 字段名3
- hdel Key Field1 Field2 Field3
- 删除键中的一个或多个字段
- hdel 键的名称 字段名1 字段名2 字段名3
List( 链表 )
- List的简介
- List是一个链表结构
- List主要功能是push、pop、获取一个范围的所有值
- List操作中Key理解为链表的名字
- List其实就是一个 每个子元素都是string类型的双向链表
- List允许有重复值
- 从头插一个或多个值( LPUSH )
- lpush 键的名称 该键的值1 该键的值2 该键的值3
- lpush Key Value1 Value2 Value3
- 从队列左边向队列写入一个或多个值
- 队列的左面为队列头
- 右边为队列尾
- lpush 键的名称 该键的值1 该键的值2 该键的值3
- 从列表中取指定值( LRANGE )
- lrange 键的名称 起始下标 终止下标
- lrange Key Start End
- 从队列中获取指定的返回值
- 从队列左边向右获取
- 下标
- 0代表队列中第一个元素
- 1代表第二个元素,依次类推
- -1代表队列中最后一个元素
- -2代表倒数第二个元素,依次类推
- lrange 键的名称 起始下标 终止下标
- 从尾插一个或多个值( RPUSH )
- rpush 键的名称 该键的值1 该键的值2 该键的值3
- rpush Key Value1 Value2 Value3
- 从队列右边向队列写入一个或多个值
- rpush 键的名称 该键的值1 该键的值2 该键的值3
- 在指定位置插一个值( LINSERT )
- linset 键的名称 之前/之后 作为定位的值 要插入的值
- linsert Key before / after Value1 Value2
- 在队列中指定元素之前或之后插入新值
- linset 键的名称 之前/之后 作为定位的值 要插入的值
- 修改键中指定的值( LSET )
- lset 键的名称 指定下标 新值
- lset Key num Value
- 给队列中指定元素设定新值
- lset 键的名称 指定下标 新值
- 删除键中指定的指定数量的值( LREM )
- lrem 键的名称 要删除的值的数量 要删除的值
- lrem Key num Value
- 从队列中删除num个值为要删除的值的元素
- num > 0 从队列头向尾删除num个元素
- num < 0 从队列尾向头删除num个元素
- num = 0 删除所有值为要删除的值的元素
- lrem 键的名称 要删除的值的数量 要删除的值
- 修剪队列( LTRIM )
- ltrim 键的名称 起始下标 结束下标
- ltrim Key Start End
- 修剪队列
- 让队列只保留指定指定范围内的元素
- ltrim 键的名称 起始下标 结束下标
- 删除第一个值( LPOP )
- lpop 键的名称
- lpop Key
- 从指定的队列左面移除一个值
- lpop 键的名称
- 删除最后一个值( RPOP )
- rpop 键的名称
- rpop Key
- 从指定队列的右边移除一个值
- rpop 键的名称
- 删除原队列中最后一个值并把该值写入另一个队列( RPOPLPUSH )
- rpoplpush 原队列的键名称 另一个队列的键名称
- rpoplpush Key1 Key2
- 移除源队列的最后一个元素
- 把该元素写入到目标队列的队首
- 两队列可是同一个
- 该操作等于将最右的那个放到最左
- 也就是将最后一个放到第一个
- rpoplpush 原队列的键名称 另一个队列的键名称
- 获取指定的值( LINDEX )
- lindex 键的名称 指定下标
- lindex Key num
- 获取队列中指定下标元素的值
- lindex 键的名称 指定下标
- 获取队列的长度( LLEN )
- llen 键的名称
- llen Key
- 获得队列的长度
- llen 键的名称
Sets( 无序集合 )
- Sets的简介
- Sets是集合
- Sets是string类型的无序集合
- 通过哈希来操作的
- 对Sets我们可以取并集、交集、差集
- 通过这些操作我们可以实现社交网站中的好友推荐和blog的tag功能
- Sets不允许有重复值
- 设置( 添加 )值到集合( SADD )
- sadd 键的名称 该键的值1 该键的值2 该键的值3
- sadd Key Value1 Value2 Value3
- 添加一个或多个元素到集合中
- sadd 键的名称 该键的值1 该键的值2 该键的值3
- 获取集合中的所有值( SMEMBERS )
- smembers 键的名称
- smembers Key
- 获取集合里面所有的元素
- smembers 键的名称
- 删除集合中的一个或多个值( SREM )
- srem 键的名称 该键的值1 该键的值2
- srem Key Value1 Value2
- 从集合中删除指定的一个或多个元素
- srem 键的名称 该键的值1 该键的值2
- 随机删除集合中的一个元素( SPOP )
- spop 键的名称
- spop Key
- 随机从集合中删除一个元素
- 并返回被删除的元素
- spop 键的名称
- 随机获取集合中的一个或多个元素( SRANDMEMBER )
- srandmember 键的名称 返回数量
- srandmember Key Num
- 随机返回集合中一个或多个元素,但不删除
- srandmember 键的名称 返回数量
- 获取集合元素的个数( SCARD )
- scard 键的名称
- scard Key
- 获取集合里面元素个数
- scard 键的名称
- 判读是否为集合的元素( SISMEMBER )
- sismember 键的名称 指定的值
- sismember Key Value
- 确定一个指定的值是否是集合中的元素
- 是返回1
- 不是返回0
- sismember 键的名称 指定的值
- 返回两个结合的差集( SDIFF )
- sdiff 键的名称1 键的名称2
- sdiff Key1 Key2
- 返回集合1与集合2的差集。以集合1为主
- sdiff 键的名称1 键的名称2
- 将两个集合的差集放入一个新集合( SDIFFSTORE )
- sdiffstore 新键的名称 键的名称1 键的名称2
- sdiffstore Key-N Key1 Key2
- 返回集合1和集合2的差集,并把结果存入新集合
- sdiffstore 新键的名称 键的名称1 键的名称2
- 获得两个集合的交集( SINTER )
- sinter 键的名称1 键的名称2
- sinter Key1 Key2
- 获得两个集合的交集
- sinter 键的名称1 键的名称2
- 将两个集合的交集放入一个新集合( SINTERSTORE )
- sinterstore 新键的名称 键的名称1 键的名称2
- sinterstore Key-N Key1 Key2
- 获得集合1和集合2的交集,并把结果存入新集合
- sinterstore 新键的名称 键的名称1 键的名称2
- 获得两个集合的并集( SUNION )
- sunion 键的名称1 键的名称2
- sunion Key1 Key2
- 获得指定集合的并集
- sunion 键的名称1 键的名称2
- 将两个集合的并集放入一个新集合( SUNIONSTORE )
- sunionstore 新建的名称 键的名称1 键的名称2
- sunionstore Key-N Key1 Key2
- 获得指定集合的并集,并把结果保存如新集合
- sunionstore 新建的名称 键的名称1 键的名称2
- 将一个集合的指定值放到另一个集合( SMOVE )
- smove 被移动的键的名称 被移动到的键的名称 要移动的值
- smove Key-O Key-N Value
- 将指定的值从源集合移动到目标集合
- smove 被移动的键的名称 被移动到的键的名称 要移动的值
Sorted Sets( 有序集合 )
- Sorted Sets的简介
- Sorted Sets是Sets的一个升级版本
- Sorted Sets给集合中每个元素都定义一个分数
- Sorted Sets中的元素按照其分数排序
- Sorted Sets不允许有重复值
- Sorted Sets中每个成员都有一个分数
- Sorted Sets中你可以指定多个分数/成员组合
- Sorted Sets中如果一个指定的成员已经在对应的有序集合中了
- 那么其分数就会被更新成最新的
- 并且该成员会重新调整到正确的位置
- 以确保集合有序
- Sorted Sets中分数的值必须是一个表示数字的字符串
- 并且可以是double类型的浮点数
- 设置( 添加 )键分数值对( ZADD )
- zadd 键的名称 分数1 该数分数的值1 分数2 该数分数的值2
- zadd Key Score1 Value1 Score2 Value2
- 该命令添加指定的成员到Key对应的有序集合
- zadd 键的名称 分数1 该数分数的值1 分数2 该数分数的值2
- 返回集合中指定的值( ZRANGE )
- zrange 键的名称 起始下标 截止下标 [是否返回其分数]
- zrange Key Start End [withscores]
- 返回有序集合中,指定区间内的成员
- 其中成员按照score(分数)值从小到大排序
- 具有相同score值的成员按照字典顺序来排列
- withscores
- 返回集合中元素的同时
- 返回其分数(score)
- zrange 键的名称 起始下标 截止下标 [是否返回其分数]
- 返回集合中指定的值( ZREVRANGE )
- zrevrange 键的名称 起始下标 截止下标 [是否返回其分数]
- zrevrange Key Start End [withscores]
- 返回有序集合中,指定区间的成员
- 其成员按照score从大到小来排列
- 具有相同score值的成员按照字典顺序来排列
- withscores
- 返回集合中元素的同时
- 返回其分数(score)
- zrevrange 键的名称 起始下标 截止下标 [是否返回其分数]
- 返回集合中的指定分数的值( ZRANGEBYSCORE )
- zrangebyscore 键的名称 集合 起始分数 截止分数 [是否返回其分数]
- zrangebyscore Key Num-S Num-E [withscores]
- 返回有序集合中score(分数)在指定区间的值
- 具有相同score值的成员按照字典顺序来排列
- withscores
- 返回集合中元素的同时
- 返回其分数(score)
- zrangebyscore 键的名称 集合 起始分数 截止分数 [是否返回其分数]
- 删除集合中的指定值( ZREM )
- zrem 键的的名称 该键的值1 该键的值2
- zrem Key Value1 Value2
- 删除有序集合中指定的值
- zrem 键的的名称 该键的值1 该键的值2
- 给集合中的值的分数做+n( ZINCRBY )
- zincrby 键的名称 增量 要增加分数的值
- zincrby Key num Value-S
- 给有序集合中指定值的成员的分数(score)值加上增量(num)
- 如果集合中没有这个值,则给添加一个分数是num的值
- zincrby 键的名称 增量 要增加分数的值
- 返回集合中指定的值( ZRANK )
- zrank 键的名称 指定的值
- zrank Key Value
- 返回有序集合中指定值的下标
- 值按照score从小到大排序
- zrank 键的名称 指定的值
- 返回集合中的指定的值( ZREVRANK )
- zrevrank 键的名称 指定的值
- zrevrank Key Value
- 返回有序集合中指定值的下标
- 值按照score从大到小排序
- zrevrank 键的名称 指定的值
- 返回集合中指定分数之间值的个数( ZCOUNT )
- zcount 键的名称 起始分数 截止分数
- zcount Num-S Num-E
- 返回有序集合中
- score值在起始分数与截止分数之间的个数
- zcount 键的名称 起始分数 截止分数
- 返回集合中的值的个数( ZCARD )
- zcard 键的名称
- zcard Key
- 返回有序集合元素的个数
- zcard 键的名称
- 删除集合中指定分数区间的值( ZREMRANGEBYSCORE )
- zremrangebyscore 键的名称 起始分数 截止分数
- zremrangebyscore Key Num-S Num-E
- 删除有序集合中
- 分数在指定区间的元素
- zremrangebyscore 键的名称 起始分数 截止分数
- 将多个集合的交集放到一个新的集合中( ZINTERSTORE )
- zinterstore 新键的名称 取交集的集合个数 键的名称1 键的名称2
- zinterstore Key-N num Key1 Key2
- 取集合1和集合2的交集,并把结果保存到新集合中
- 在计算交集之前,需要指定计算交集的集合的个数
- 交集中,值的分数是多个集合中分数的和
- zinterstore 新键的名称 取交集的集合个数 键的名称1 键的名称2
- 将多个集合的并集放到一个新的集合中( ZUNIONSTORE )
- zunionstore 新键的名称 取并集的集合的个数 键的名称1 键的名称2
- zunionstore Key-N num Key1 Key2
- 取集合1和集合2的并集,并把结果保存到新集合中
- 在计算并集之前,需要指定计算并集的集合的个数
- 并集中,值的分数是多个集合中分数的和。
- zunionstore 新键的名称 取并集的集合的个数 键的名称1 键的名称2
各个数据类型的选择
| 数据类型 | 适合做的工作 |
|---|---|
| 哈希类型( Hashs ) | 适合做数据缓存 |
| 链表类型( List ) | 适合做数组搜索 |
| 无序集合类型( Sets ) | 适合做好友推送 |
| 有序集合类型( Sorted Sets) | 适合商品排序 |
PS
- 查找指定键( KEYS )
- keys 键的名称
- keys K?e*y
- 支持通配符
- 查看库中所有的键
- keys *
- keys 键的名称
- 删除键值对( DEL )
- del 键的名称
- del Key
- 删除一个键
- 成功返回1
- 失败即键值对不存在返回0
- del 键的名称
- Redis的启用步骤
- 首先,在服务器装redis. 记得更改配置
- 其次,安装php-redis
- 随后,你得知道基本的语句