一、Redis介绍
1、介绍
通常,在系统中,我们会把数据交由数据库来存储,但传统的数据库增删查改的性能较差,且比较复杂。根据 80/20 法则,百分之八十的业务访问集中在百分之二十的数据上。是否可以有一个存在于物理内存中的数据中间层,来缓存一些常用的数据,解决传统数据库数据读写性能问题。常用的数据都存储在内存中,读写性能非常可观。
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型的高性能的key-value数据库。它支持存储的value类型包括 string(字符串)、list(链表)、set(集合)、zset(sorted set有序集合)和 hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
2、redis 优势
> redis数据库完全在内存中,使用磁盘仅用于持久性。不仅可用作缓存,更可为一种key-value存储,他完全可替代后端的存储服务,但需要做好备份。
> Redis可以将数据复制到任意数量的从服务器。
> Redis的速度非常快,每秒能执行约11万集合,每秒约81000+条记录。
> 支持丰富的数据类型,Redis支持大多数开发人员已经知道的像列表,集合,有序集合,散列数据类型。这使得它非常容易解决各种各样的问题,因为我们知道哪些问题是可以通过它的数据类型处理更好。
> 所有Redis操作是原子的,这保证了如果两个客户端同时访问的Redis服务器将获得更新后的值。
> Redis是一个多功能实用的工具,可以在多个用例如缓存,消息,队列使用(Redis原生支持发布/订阅);任何短暂的数据,应用程序,如Web应用程序会话,网页命中计数,热点排行等。就看什么样的业务场景以及你怎么去设计使用好它的数据结构。
二、Redis安装
1、Linux下安装
1、安装
首先可以从redis官网找一个稳定版下载:https://redis.io/download
# cd /usr/local # wget http://download.redis.io/releases/redis-4.0.2.tar.gz # tar zxf redis-4.0.2.tar.gz # cd redis-4.0.2
# #直接make则安装到src目录下,可以通过如下方式安装到指定目录
# make PREFIX=/usr/local/redis install
安装完后,在/usr/local/redis/bin下可以看到如下文件,同时在redis-4.0.2/src/也是存在的。
各个文件如下:
redis-benchmark Redis性能测试工具 redis-check-aof 检查aof日志工具 redis-check-rdb 检查rdb日志工具 redis-cli 连接用的客户端
redis-sentinel Redis集群的管理工具 监控多个master-slave集群,发现master宕机后能进行自动切换 redis-server Redis服务程序
启动服务:
# cd /usr/local/redis/bin # ./redis-server
# #上面是以默认的配置启动服务,可以根据指定的配置文件启动服务
# #首先将配置文件复制到安装目录下
# cp /usr/local/src/redis-4.0.2/redis.conf /usr/local/redis/
# #指定配置文件启动
# ./redis-server ../redis-conf
这样就算安装成功了:默认端口可以看到使用的是6379.
会发现启动的redis一致占据着终端,修改redis.conf,让redis以后台进程的形式运行。
# vim redis.conf
# #修改 daemonize 为 yes 即可,然后重新启动,就不会占据终端了。
测试:./redis-cli 启动客户端
2、注册成服务
将redis注册成系统服务,不然每次都要到安装目录下手动启动服务.
如果服务开着,首先把服务关掉:./redis-cli shutdown
首先将redis目录下的初始化脚本拷贝到/etc/rc.d/init.d目录,同时重命名为redis
# cp /usr/local/src/redis-4.0.2/utils/redis_init_script /etc/rc.d/init.d/redis
修改redis脚本
a) 第二行增加如下内容:# chkconfig: 2345 80 90
b) 原脚本EXEC和CLIEXEC的值改到安装目录下.
c) 在$EXEC $CONF 后边加一个&,表示让redis作为后台服务启动,否则该服务会独占输入屏。
d) 可以看到在/etc/init.d/redis文件中有这么一行:CONF="/etc/redis/${REDISPORT}.conf",启动时的默认配置文件为/etc/redis/6379.conf。于是将redis配置文件拷贝到/etc/redis/下,并命名为 6379.conf 。
# mkdir /etc/redis # cp /usr/local/src/redis-4.0.2/redis.conf /etc/redis/6379.conf
e) 至此修改完毕,注册服务
# chkconfig --add redis
f) 启动服务和停止服务命令
# service redis start # service redis stop
2、Windows下安装
1、安装
首先下载windows版redis:https://github.com/MicrosoftArchive/redis/releases
这里我下载解压版:
下载完成后,解压即可:可以看到如下文件.
redis-server.exe Redis启动程序
redis.windows.conf 配置文件
通过如下命令启动:这样就代表启动成功。同样会一直占用着终端。
启动客户端进行测试:
2、注册成系统服务
redis-server.exe --service-install redis.windows.conf
3、Redis数据库
redis安装完成之后,可以使用图形化管理工具RedisDesktopManager,可以很方便的查看redis的所有数据。
通过管理工具我们可以看到redis的数据库:
redis默认有16个数据库,可以通过配置文件修改。
redis下,数据库是由一个整数索引标识,默认启用0数据库,通过select命令可以切换数据库。且每个数据库都有属于自己的空间,不必担心之间的key冲突。
* flushdb,清空当前数据库,flushall,清空所有数据库。
三、Redis通用key操作命令
redis有很多数据类型,如string、list、set、zset等等,这里先学习redis对于key的操作命令,再学习数据类型的操作。
首先插入几条数据:
1、 keys:查询key
可以使用模糊查询key,有三个通配符 *、?、[]。* 通配任意字符,? 通配单个字符,[] 通配某一个字符。
2、randomkey:随机取一个key
例如抽奖时可用于随机抽取一个人。
3、exists key:判断key是否存在,返回1/0
4、type key:判断key存储的值的类型
返回的类型可能有string、list、set、zset、hash等,但不包括int、boolean、long这种基本类型,其以字符串形式保存。
5、rename key newkey:重命名key
如果newkey 已经存在,则newkey的原值被覆盖
6、renamenx key newkey:重命名key
nx > not exists,即newkey不存在时才修改,发生修改时返回1,未发生修改返回0。
7、del key1 key2 ... keyn:删除key
不存在的key忽略,返回真正删除的key的数量
8、move key dbid:将key移动到dbid数据库
9、expire key seconds:设置key的生命周期,单位秒
pexpire key milliseconds:设置生命周期,单位毫秒。
redis的key默认是永久有效的。
10、ttl key:查询key的生命周期,返回秒数
pttl key:返回毫秒数。
对于不存在的key、已经过期的key返回-2;永久有效的key,返回-1。
11、expireat key timestamp:设置key的过期时间,timestamp为unix的时间戳
pexpireat key milliseconds-timestamp:unix时间为毫秒。
需要将过期的时间转为Unix时间戳。
12、persist key:把指定的key设为永久有效
可以将设置过期时间的key转为永久有效。
最后:
不要使用太长的键,例如,不要使用一个 1024 字节的键,不仅是因为内存占用,而且在数据集中查找键时需要多次耗时的键比较。
不要使用太短的键。用”u1000flw” 取代”user:1000:followers” 作为键并没有什么实际意义,后者更具有可读性,相对于键对象本身以及值对象来说,增加的空间微乎其微。
坚持一种模式 (schema)。例如,”object-type:id” 就不错,就像”user:1000”。点或者横线常用来连接多单词字段,如”comment:1234:reply.to”,或者”comment:1234:reply-to”。
键的最大大小是 512MB。