(1)概述
Redis是一个开源的,高性能,用C语言写的 非关系型数据库:nosql(not only sql),它的存储方式为:用key-value的方式进行存储,多用于做中央缓存。支持集群(主从同步),支持数据的持久化,可存储于磁盘中。
关系型数据库:mysql,sql server,oracle。
mysql和redis和memcached对比:
| mysql | redis | memcached |
类型 | 关系型 | 非关系型 | 非关系型 |
存储位置 | 磁盘 | 磁盘和内存 | 内存 |
存储过期 | 不支持 | 支持 | 支持 |
读写性能 | 低 | 非常高 | 非常高 |
(2)安装Redis
Redis 的官方下载站是 http://redis.io/download,可以去上面下载最新的安装程序下来,这个下载下来是Linux服务器版本的,官方没有windows版本的,但是github上有提供windows版本的:https://github.com/ServiceStack/redis-windows/blob/master/downloads/redis64-2.8.12.zip
(3)简单使用
下载解压后可以直接使用,有两种使用方式:
(1)直接运行里面的redis-server.exe这个服务端,必须在开启服务端后再去直接运行redis-cli.exe客户端就可以进行操作,但是不推荐此方法,因为这样是用的默认的端口6379,如果在redis.conf中修改了端口号,则不能建立连接。
连接的ip -p 端口号,然后进行操作。
当建立连接之后,就可以进行基本的操作:操作的方式有两种方式,和mysql对比起来,mysql有可视化的操作工具(例如Navicat),但是redis没有可视化工具,所以提供两种方式进行操作:
(a)通过上面讲的命令行的方式进行操作,因为存储的方式为key-value 方式,所以进行存储的格式也为这个
存值(存一个):set k v 取值(取一个):get k 存值(存多个):mset k v k v... 取值(取多个):mget k k ...
自增1:Incr k 自减1:decr k 增加指定的值: incrBy k n 减上指定的值:decrBy k n
查看当前库的所有的key列表:keys * Redis:有16个库,从0--15,默认是0号库,库的选择:select 库号;不同库的数据不影响:select 0-15
删除key:del k 删除多个key:del k1 k2... 设置key的过期时间(xx秒后过期):expire key xx 查看key的过期时间:ttl key
清除当前库,redis中默认有16个数据库,名称分别为0,1,2.。。15:flushdb
清空整个redis服务器数据,所有的数据库全部清空:flushall
对list集合的常规操作:list的存储是列队的模式,可以从两端进行存储和拿取,先进后出,注意:当操作一个集合的时候,key值是固定的
lpush k v 从右边插入数据:rpush k v
lpop k 移除并返回该集合最右边的元素:rpop k
lrange k start stop
lrem key count value,count:正数负数决定移除的方向,count:绝对值决定移除的数量
lindex key index
对一个列表进行修剪:ltrim key start stop
(b)通过java代码的方式操作数据库
//获取jedis对象即获取连接,没有使用连接池
Jedis jedis = new Jedis();
jedis.set("name", "小明");
System.out.println(jedis.get("name"));
jedis.close();
通过配置连接池进行配置:
//设置连接池的配置
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxTotal(20);//配置高峰时最大的连接数
jedisPoolConfig.setMaxIdle(5);//设置空闲时最大连接数
jedisPoolConfig.setMaxWaitMillis(2000);//设置最大的等待时间
jedisPoolConfig.setTestOnBorrow(true);//在使用连接的时候,测试连接是否畅通
//这是配置连接池对象
JedisPool jedisPool = new JedisPool(jedisPoolConfig,"127.0.0.1");
//获取连接对象
Jedis jedis = jedisPool.getResource();
jedis.set("name", "小明");
System.out.println(jedis.get("name"));
jedis.close();
(4)设置密码
方式(1)通过命令动态调整密码:但这只是临时的密码,当服务器重启的时候密码会失效,所以在设置密码后不用重启
CONFIG SET requirepass 123456
清除密码:CONFIG SET requirepass ""
输入密码进行验证:AUTH 123456
方式(2)通过配置文件设置密码,这个密码是长久有效的,需要重新启动服务器
在配置文件redis.conf中增加一行代码:requirepass 123456
(5)持久化配置
两种方式:(1)更新日志:.aof:appendonly yes/no
.rdb:在指定的时间间隔内生成数据集的时间点快照,默认开启该模式,需要满足一定条件才能执行持久化
都是需要在redis.conf中进行配置
(6)淘汰策略
因为数据是存在内存中的,为了确保数据的有效性,确保数据的优化,所以选择合适的淘汰策略进行淘汰,当redis存放的数据到达配置的最大内容后,会按照配置淘汰策略进行淘汰
(1)volatile-lru:从已设置过期时间的数据集中挑选最近最少使用的数据淘汰
(2)volatile-ttl:从已设置过期时间的数据集中挑选将要过期的数据淘汰
(3)allkeys-lru:从数据集中挑选最近最少使用的数据淘汰(常用)