一、Redis概述
Redis由来
2008年,意大利的一家创业公司MeRzia推出了一款基于MySQL的网站实时统计系统 LLOOGG,然而没过多久该公司的创始人 SalvatoRe Sanfilippo 便对MySQL 的性能感到失望,于是他决定亲自为 LLOOGG 量身定做一个 数据库,并并于 2009 年开发完成,这个数据库就是Redis。
什么是Redis
Redis 是用 C 语言开发的一个开源的高性能键值对(key-value)数据库。它通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止 Redis 支持的键值数据类型如下:
1. 字符串类型
2. 散列类型
3. 列表类型
4. 集合类型
5. 有序集合类型。
Redis的应用场景
缓存(数据查询、短连接、新闻内容、商品内容等等)(最多使用);
聊天室的在线好友列表;
任务队列(秒杀、抢购、12306等等);
应用排行榜;
网站访问统计;
数据过期处理(可以精确到毫秒);
分布式集群架构中的session分离。
二、Redis安装、启动和停止
Redis是C语音开发,安装redis需要先将官网下载的源码进行编译,编译依赖gcc环境。如果没有gcc,需要安装gcc:
1、 打开xshell,链接Linux服务器,运行yum install gcc-c++;
至此,gcc环境安装好了,则可以进行redis的安装了。
2、下载压缩包:wget http://download.redis.io/releases/redis-3.0.6.tar.gz
3、解压:tar xzf redis-3.0.6.tar.gz
3、 进入redis路径下,cd redis-3.0.6,执行‘make’命令进行基本的编译。(如果没有安装gcc,此时会出错);
4、make完成;
5、安装到指定目录下:make FREFIX=/usr/local/redis install
6、回到root下的redis-3.0.6路径下,拷贝redis.conf文件到/usr/local/redis路径下,执行cp redis.conf /usr/local/redis
7、进入该目录下,启动redis(但这只是前端启动,启动完了以后无法进行操作,需要ctrl+c退出):
cd /usr/local/redis/bin
./redis-server
8、接下来,修改redis.conf文件 vim redis.conf
将redis.conf文件中该行的“”no”改为“yes”
9、重新启动redis并加载配置文件,此时redis已经成功启动
10、可以通过以下命令查看redis的启动情况:ps -ef | grep -i redis
可以看出redis的默认端口号为6379
11、停止redis:./bin/redis-cli shutdown
三、Redis的使用
1、Redis启动
./bin/redis-server ./redis-conf
2、进入redis客户端./bin/redis-cli
3、查看连接情况,以下情况证明连接成功
4、set、get、del、keys *命令进行存入、读取、删除、查看全部key操作;
四、Jedis入门
Jedis是Redis官方首选的Java客户端开发包
1、jedis下载地址
https://github.com/xetorthio/jedis
2、jedis使用
1)eclipse新建一个java 项目,例如jedis
2)新建lib文件夹放入以下两个jar包,并Add to Build Path
使用Java操作Redis需要jedis-2.1.0.jar,
下载地址:http://files.cnblogs.com/liuling/jedis-2.1.0.jar.zip
如果需要使用redis连接池的话,还需要commons-pool-1.5.4.jar,
下载地址:http://files.cnblogs.com/liuling/commons-pool-1.5.4.jar.zip
3)jedis的使用
五、redis的数据结构
1.存储字符串常用命令
1)赋值:set
2)取值:get
3)删除:del
4)扩展命令:incr(递增)、decr(递减)、incrby、decrby、append
2.存储hash的常用命令
1)赋值:hset
2)取值
3)删除
4)增加数字
5)自学命令
3.存储list
1)ArrayList使用数组方式
2)LinkedList使用双向链接方式
3)双向链表中增加数据
4)双向链表中删除数据
常用命令:
1)两端添加
lpush、rpush
2)两端弹出
lpop、rpop
3)查看列表
lrange
4)获取列表元素个数
llen
5)自学命令
lpushx、rpushx、lset、linsert.. before、linsert ..after
3.存储set
和list类型不同的是,set集合中不允许出现重复的元素。
常用命令:
1)添加、删除元素
sadd、srem
2)获取集合中的元素
smembers(查看所有元素)、sismembers(判断是否在集合内)
3)集合中的差集运算
sdiff
4)集合中并集运算
sunion(会去除重复元素)
5)集合中的交集运算
sinter
6)扩展命令
sranmember(随机输出)、sdiffstore(差集放入一个指定集合中)、sinterstore(交集放入一个指定集合中)、sunionstore(并集放入一个指定集合中)
4.存储sorted-set
sorted-set在集合中的位置是有序的
使用场景:游戏排名、微博热点等
常用命令:
1)添加元素
zadd
2)删除元素
zrem
3)获取元素
zscore
4)获取范围
zrange、zrange..withscores
5.keys的通用操作
key * //获取全部key
key my? //获取全部my开头的key
del my1 my2 my3 //删除my1 my2 my3的key
exists my1 //判断是否存在my1的key
rename name myname //重命名name为myname
expire myname 1000 //设置myname的过期时间为1000s
ttl myname //查看剩余时间
type myname //查看类型
六、Redis的特性
多数据库
redis默认有db0~db15之多。redis下,数据库是由一个整数索引标识,而不是由一个数据库名称。默认情况下,一个客户端连接到数据库0。可以通过下面的命令来切换到不同的数据库下:
select 0、select 1、select 2….
Redis事务
事务提供了一种“将多个命令打包, 然后一次性、按顺序地执行”的机制, 并且事务在执行的期间不会主动中断 —— 服务器在执行完事务中的所有命令之后, 才会继续处理其他客户端的其他命令。
Redis 通过 MULTI 、 DISCARD 、 EXEC 和 WATCH 四个命令来实现事务功能。
一个事务从开始到执行会经历以下三个阶段:开始事务、命令入队、执行事务。
它先以 MULTI 开始一个事务, 然后将多个命令入队到事务中, 最后由 EXEC 命令触发事务, 一并执行事务。
七、redis持久化
持久化用于重启后的数据恢复。
两种持久化方式,详细介绍见:
https://www.cnblogs.com/zhoujinyi/archive/2013/05/26/3098508.html
RDB方式:Snapshot(RDB)<二进制文件>,Snapshot快照存储,是默认的持久化方式,即按照一定的策略周期性的将数据保存到磁盘。对应产生的数据文件为dump.rdb,通过配置文件中的save参数来定义快照的周期。
AOF方式: AOF(Append Only File)<二进制文件>比RDB方式有更好的持久化性。由于在使用AOF持久化方式时,Redis会将每一个收到的写命令都通过Write函数追加到文件最后,类似于MySQL的binlog。当Redis重启是会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容。