redis入门html
[toc]linux
声明:参考来源互联网,有任何争议能够留言。站在前人的肩上,咱们才能看的更远。本教程纯手打,致力于最实用教程,不须要什么奖励,只但愿多多转发支持。
欢迎来我公众号,但愿能够结识你,也能够催更,微信搜索:JavaPubgit有任何问题均可以来谈谈 !github
本篇主要是 Redis 的入门,涉及一些基础命令和常见场景。redis是目前最热的缓存组件之一,若是你还不懂,那就开始,入门到实战redis
本文主要是 <font color=#159957 face="黑体">Redis</font> 入门知识,介绍 Redis 特性、使用场景、安装和数据类型。中文官网:http://www.redis.cn/sql
指非关系型数据库,不支持sql语句,nosql中存储的数据是KV形式数据库
常见的NoSQL产品有:Mongodb、Redis、Hbase hadoop、Cassandra hadoop。windows
这是一些redis介绍,作一些简单了解便可。
<font color=#159957 face="黑体">Redis</font>(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工做由VMware主持。从2013年5月开始,<font color=#159957 face="黑体">Redis</font> 的开发由Pivotal赞助。数组
redis 是一个 <font color=#159957 face="黑体">key-value</font> 存储系统。和 Memcached 相似,它支持存储的 value 类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操做,并且这些操做都是原子性的。在此基础上,<font color=#159957 face="黑体">Redis</font> 支持各类不一样方式的排序。与 <font color=#159957 face="黑体">memcached</font> 同样,为了保证效率,数据都是缓存在内存中。区别的是 <font color=#159957 face="黑体">Redis</font> 会周期性的把更新的数据写入磁盘或者把修改操做写入追加的记录文件,而且在此基础上实现了 <font color=#159957 face="黑体">master-slave</font>(主从)同步。缓存
<font color=#159957 face="黑体">Redis</font> 是一个高性能的key-value数据库。 <font color=#159957 face="黑体">Redis</font> 的出现,很大程度补偿了<font color=#159957 face="黑体">memcached</font>这类key/value存储的不足,在部 分场合能够对关系数据库起到很好的补充做用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。
<font color=#159957 face="黑体">Redis</font> 支持主从同步。数据能够从主服务器向任意数量的从服务器上同步,从服务器能够是关联其余从服务器的主服务器。这使得 <font color=#159957 face="黑体">Redis</font> 可执行单层树复制。存盘能够有意无心的对数据进行写操做。因为彻底实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操做的可扩展性和数据冗余颇有帮助。
<font color=#159957 face="黑体">Redis</font> 的官网地址,很是好记,是redis.io。(域名后缀io属于国家域名,是british Indian Ocean territory,即英属印度洋领地),Vmware在资助着 <font color=#159957 face="黑体">Redis</font> 项目的开发和维护。
下面是官方的bench-mark数据:
测试完成了 50 个并发执行 100000 个请求。
设置和获取的值是一个 256 字节字符串。
Linux box 是运行 Linux 2.6 , 这是 X3320 Xeon 2.5 ghz。
文本执行使用 loopback 接口(127.0.0.1)。
结果:读的速度是 110000次/s ,写的速度是 81000次/s 。
目前在互联网公司, <font color=#159957 face="黑体">Redis </font> 使用很是普遍,我平常工做中,会用它作爬虫采集系统中队列使用,还有在后台管理系统中作分布式,存储 token 使用。
一、<font color=#159957 face="黑体">缓存</font>
缓存如今几乎是全部中大型网站都在用的必杀技,合理的利用缓存不只可以提高网站访问速度,还能大大下降数据库的压力。<font color=#159957 face="黑体">Redis </font> 提供了键过时功能,也提供了灵活的键淘汰策略,因此,如今 <font color=#159957 face="黑体">Redis </font> 用在缓存的场合很是多。
二、<font color=#159957 face="黑体">排行榜</font>
不少网站都有排行榜应用的,如京东的月度销量榜单、商品按时间的上新排行榜等。<font color=#159957 face="黑体">Redis </font> 提供的有序集合数据类构能实现各类复杂的排行榜应用。
三、<font color=#159957 face="黑体">计数器</font>
什么是计数器,如电商网站商品的浏览量、视频网站视频的播放数等。为了保证数据实时效,每次浏览都得给+1,并发量高时若是每次都请求数据库操做无疑是种挑战和压力。<font color=#159957 face="黑体">Redis </font> 提供的 <font color=#159957 face="黑体">incr</font> 命令来实现计数器功能,内存操做,性能很是好,很是适用于这些计数场景。
四、<font color=#159957 face="黑体">分布式会话</font>
集群模式下,在应用很少的状况下通常使用容器自带的 session 复制功能就能知足,当应用增多相对复杂的系统中,通常都会搭建以 Redis 等内存数据库为中心的 session 服务,session 再也不由容器管理,而是由 session 服务及内存数据库管理。
五、<font color=#159957 face="黑体">分布式锁</font>
在不少互联网公司中都使用了分布式技术,分布式技术带来的技术挑战是对同一个资源的并发访问,如全局ID、减库存、秒杀等场景,并发量不大的场景可使用数据库的悲观锁、乐观锁来实现,但在并发量高的场合中,利用数据库锁来控制资源的并发访问是不太理想的,大大影响了数据库的性能。能够利用 Redis 的setnx功能来编写分布式的锁,若是设置返回1说明获取锁成功,不然获取锁失败,实际应用中要考虑的细节要更多。
六、<font color=#159957 face="黑体">社交网络</font>
点赞、踩、关注/被关注、共同好友等是社交网站的基本功能,社交网站的访问量一般来讲比较大,并且传统的关系数据库类型不适合存储这种类型的数据,Redis提供的哈希、集合等数据结构能很方便的的实现这些功能。
七、<font color=#159957 face="黑体">最新列表</font>
Redis列表结构,LPUSH能够在列表头部插入一个内容ID做为关键字,LTRIM可用来限制列表的数量,这样列表永远为N个ID,无需查询最新的列表,直接根据ID去到对应的内容页便可。
八、<font color=#159957 face="黑体">消息系统</font>
消息队列是大型网站必用中间件,如ActiveMQ、RabbitMQ、Kafka 等流行的消息队列中间件,主要用于业务解耦、流量削峰及异步处理实时性低的业务。Redis 提供了发布/订阅及阻塞队列功能,能实现一个简单的消息队列系统。另外,这个不能和专业的消息中间件相比。
redis 开源在 github 上
下载地址: https://github.com/tporadowsk...
Redis 支持 32 位和 64 位。这个须要根据你系统平台的实际状况选择,这里咱们下载 Redis-x64-xxx.zip压缩包到 C 盘,解压后,将文件夹从新命名为 redis。
解压后,打开 cmd 窗口,cd 切换到 redis根目录下。
redis-server.exe redis.windows.conf
不要关闭原 cmd 窗口,新打开一个 cmd 窗口,切换到 redis 根目录
redis-cli.exe -h 127.0.0.1 -p 6379
6379 是 redis 默认端口,咱们能够在配置中修改
设置 key 值
set myKey abc
取出 key 值
get myKey
linux 和 windows 下相似,启动方式参考上文
$ wget http://download.redis.io/releases/redis-2.8.17.tar.gz $ tar xzf redis-2.8.17.tar.gz $ cd redis-2.8.17 $ make
类型中会涉及到不少的 Redis 操做命令,必定耐心看完,优化的基础是要了解。
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它能够用做数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不一样级别的 磁盘持久化(persistence), 并经过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。
redis是很是优秀的缓存工具,熟练使用redis,可让咱们的开发进一步。
对于下面操做,能够经过 redis-cli 工具链接使用
关于key的几条规则,必定不要觉得它们不重要,了解一些对你排查问题相当重要。
Redis key 值是二进制安全的,这意味着能够用任何二进制序列做为key值,从形如”foo”的简单字符串到一个 JPEG 文件的内容均可以。空字符串也是有效 key 值。
关于key的几条规则:
二进制安全的字符串
字符串方式是redis最简单的数据类型,redis就像一个能够持久化的memcached服务器。
> set mykey somevalue OK > get mykey "somevalue"
例如:当key存在时,set会失败。值的长度不能超过512MB。
> set counter 100 OK > incr counter (integer) 101 > incr counter (integer) 102 > incrby counter 50 (integer) 152
<font color=#159957 face="黑体">INCR </font> 命令将字符串解析成整型,将其加一,再将结果保存成新的字符串,相似的命令还有 <font color=#159957 face="黑体">INCRBY</font> , <font color=#159957 face="黑体">DECR</font> 和 <font color=#159957 face="黑体">DECRBY</font> 。
还有一个有趣的命令, <font color=#159957 face="黑体">GETSET</font> 命令:设置新值,返回原值。这个操做有什么用?在咱们须要保证原子性操做时
MSET 和 MGET 是批量操做
> mset a 10 b 20 c 30 OK > mget a b c 1) "10" 2) "20" 3) "30"
<font color=#159957 face="黑体">MGET</font> 命令返回由值组成的数组。
<font color=#159957 face="黑体">exists</font>:判断键是否存在, <font color=#159957 face="黑体">del</font>:删除指定键
> set mykey hello OK > exists mykey (integer) 1 > del mykey (integer) 1 > exists mykey (integer) 0
<font color=#159957 face="黑体">TYPE</font> 命令返回key对应的存储类型
> set mykey x OK > type mykey string > del mykey (integer) 1 > type mykey none
对 key 设置<font color=#159957 face="黑体">超时</font>。精度可使用毫秒或秒。
> set key some-value OK > expire key 5 (integer) 1 > get key (immediately) "some-value" > get key (after some time) (nil)
使用了 <font color=#159957 face="黑体">EXPIRE</font> 来设置超时时间(也能够再次调用这个命令来改变超时时间,使用 <font color=#159957 face="黑体">PERSIST</font> 命令去除超时时间 )。咱们也能够在建立值的时候设置超时时间:
> set key 100 ex 10 OK > ttl key (integer) 9
<font color=#159957 face="黑体">TTL</font> 命令用来查看key对应的值剩余存活时间。
值得注意的: <font color=#159957 face="黑体">Redis lists</font> 基于 <font color=#159957 face="黑体">Linked Lists</font> 实现。
<font color=#159957 face="黑体">Redis 列表</font>是简单的字符串列表,按照插入顺序排序。你能够添加一个元素到列表的头部(左边)或者尾部(右边)
一个列表最多能够包含 232 - 1 个元素 (4294967295, 每一个列表超过40亿个元素)。
> rpush mylist A (integer) 1 > rpush mylist B (integer) 2 > lpush mylist first (integer) 3 > lrange mylist 0 -1 1) "first" 2) "A" 3) "B"
从右边(尾部)插入俩个元素,左边(头部)插入一个元素,<font color=#159957 face="黑体">LRANGE </font>打印全部(0,-1)元素。
BLPOP key1 [key2 ] timeout
移出并获取列表的第一个元素, 若是列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。BRPOP key1 [key2 ] timeout
移出并获取列表的最后一个元素, 若是列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。BRPOPLPUSH source destination timeout
从列表中弹出一个值,将弹出的元素插入到另一个列表中并返回它; 若是列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。LINDEX key index
经过索引获取列表中的元素LINSERT key BEFORE|AFTER pivot value
在列表的元素前或者后插入元素
说明:<font color=#159957 face="黑体">Redis Linsert</font> 命令用于在列表的元素前或者后插入元素。当指定元素不存在于列表中时,不执行任何操做。当列表不存在时,被视为空列表,不执行任何操做。若是 key 不是列表类型,返回一个错误。
实例:
redis> RPUSH mylist "Hello" (integer) 1 redis> RPUSH mylist "World" (integer) 2 redis> LINSERT mylist BEFORE "World" "There" (integer) 3 redis> LRANGE mylist 0 -1 1) "Hello" 2) "There" 3) "World" redis>
LLEN key
获取列表长度LPOP key
移出并获取列表的第一个元素LPUSH key value1 [value2]
将一个或多个值插入到列表头部LPUSHX key value
将一个值插入到已存在的列表头部LRANGE key start stop
获取列表指定范围内的元素LREM key count value
移除列表元素
count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。 count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。 count = 0 : 移除表中全部与 VALUE 相等的值。
LSET key index value
经过索引设置列表元素的值LTRIM key start stop
对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间以内的元素都将被删除。
注意:下标从0开始
RPOP key
移除列表的最后一个元素,返回值为移除的元素。RPOPLPUSH source destination
移除列表的最后一个元素,并将该元素添加到另外一个列表并返回。RPUSH key value1 [value2]
在列表中添加一个或多个值RPUSHX key value
为已存在的列表添加值
<font color=#159957 face="黑体">Redis hash </font> 是一个 <font color=#159957 face="黑体">string </font>类型的 <font color=#159957 face="黑体">field </font> 和 <font color=#159957 face="黑体">value </font> 的映射表, <font color=#159957 face="黑体">hash </font> 特别适合用于存储对象。
Redis 中每一个 hash 能够存储 232 - 1 键值对(40多亿)。
序号 命令及描述 1 HDEL key field1 [field2] 删除一个或多个哈希表字段 2 HEXISTS key field 查看哈希表 key 中,指定的字段是否存在。 3 HGET key field 获取存储在哈希表中指定字段的值。 4 HGETALL key 获取在哈希表中指定 key 的全部字段和值 5 HINCRBY key field increment 为哈希表 key 中的指定字段的整数值加上增量 increment 。 6 HINCRBYFLOAT key field increment 为哈希表 key 中的指定字段的浮点数值加上增量 increment 。 7 HKEYS key 获取全部哈希表中的字段 8 HLEN key 获取哈希表中字段的数量 9 HMGET key field1 [field2] 获取全部给定字段的值 10 HMSET key field1 value1 [field2 value2 ] 同时将多个 field-value (域-值)对设置到哈希表 key 中。 11 HSET key field value 将哈希表 key 中的字段 field 的值设为 value 。 12 HSETNX key field value 只有在字段 field 不存在时,设置哈希表字段的值。 13 HVALS key 获取哈希表中全部值。 14 HSCAN key cursor [MATCH pattern] [COUNT count] 迭代哈希表中的键值对。
参考: https://www.runoob.com/redis/...
Redis 的 <font color=#159957 face="黑体">Set </font> 是 <font color=#159957 face="黑体">String </font> 类型的无序集合。集合成员是惟一的,这就意味着集合中不能出现重复的数据。
Redis 中<font color=#159957 face="黑体">集合 </font>是经过哈希表实现的,因此添加,删除,查找的复杂度都是 O(1)。
序号 命令及描述 1 SADD key member1 [member2] 向集合添加一个或多个成员 2 SCARD key 获取集合的成员数 3 SDIFF key1 [key2] 返回给定全部集合的差集 4 SDIFFSTORE destination key1 [key2] 返回给定全部集合的差集并存储在 destination 中 5 SINTER key1 [key2] 返回给定全部集合的交集 6 SINTERSTORE destination key1 [key2] 返回给定全部集合的交集并存储在 destination 中 7 SISMEMBER key member 判断 member 元素是不是集合 key 的成员 8 SMEMBERS key 返回集合中的全部成员 9 SMOVE source destination member 将 member 元素从 source 集合移动到 destination 集合 10 SPOP key 移除并返回集合中的一个随机元素 11 SRANDMEMBER key [count] 返回集合中一个或多个随机数 12 SREM key member1 [member2] 移除集合中一个或多个成员 13 SUNION key1 [key2] 返回全部给定集合的并集 14 SUNIONSTORE destination key1 [key2] 全部给定集合的并集存储在 destination 集合中 15 SSCAN key cursor [MATCH pattern] [COUNT count] 迭代集合中的元素
参考: https://www.runoob.com/redis/...
序号 命令及描述 1 ZADD key score1 member1 [score2 member2] 向有序集合添加一个或多个成员,或者更新已存在成员的分数 2 ZCARD key 获取有序集合的成员数 3 ZCOUNT key min max 计算在有序集合中指定区间分数的成员数 4 ZINCRBY key increment member 有序集合中对指定成员的分数加上增量 increment 5 ZINTERSTORE destination numkeys key [key ...] 计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中 6 ZLEXCOUNT key min max 在有序集合中计算指定字典区间内成员数量 7 ZRANGE key start stop [WITHSCORES] 经过索引区间返回有序集合指定区间内的成员 8 ZRANGEBYLEX key min max [LIMIT offset count] 经过字典区间返回有序集合的成员 9 ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT] 经过分数返回有序集合指定区间内的成员 10 ZRANK key member 返回有序集合中指定成员的索引 11 ZREM key member [member ...] 移除有序集合中的一个或多个成员 12 ZREMRANGEBYLEX key min max 移除有序集合中给定的字典区间的全部成员 13 ZREMRANGEBYRANK key start stop 移除有序集合中给定的排名区间的全部成员 14 ZREMRANGEBYSCORE key min max 移除有序集合中给定的分数区间的全部成员 15 ZREVRANGE key start stop [WITHSCORES] 返回有序集中指定区间内的成员,经过索引,分数从高到低 16 ZREVRANGEBYSCORE key max min [WITHSCORES] 返回有序集中指定分数区间内的成员,分数从高到低排序 17 ZREVRANK key member 返回有序集合中指定成员的排名,有序集成员按分数值递减(从大到小)排序 18 ZSCORE key member 返回有序集中,成员的分数值 19 ZUNIONSTORE destination numkeys key [key ...] 计算给定的一个或多个有序集的并集,并存储在新的 key 中 20 ZSCAN key cursor [MATCH pattern] [COUNT count] 迭代有序集合中的元素(包括元素成员和元素分值)
若是你读到在这里,相信你对 Redis 已经有了必定了解,入门就先简单学到这里,下篇一块儿上 <font color=#159957 face="黑体">青铜</font>。
后面的篇章,还将继续介绍 Redis 的一些高级用法,缓存击穿、缓存雪崩,源码分析等。看后不忘三连,还有须要更多技术博文能够留言催更。