对码当歌,猿生几何?

Redis数据库入门

(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中修改了端口号,则不能建立连接。

             (2)在当前解压后的目录中,运行cmd命令行,首先启动服务端:redis-server.exe redis.conf,在不关闭服务端的前提下运行客户端:redis-cli.exe -h 连接的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

           返回集合中指定区间的元素:start为开始元素的下标,stop为结束元素的下标,下标都以0开始计算,当查询所有的元素则结束下标为-1:lrange k start stop

          根据count值移除列表key中与参数 value 相等的元素count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。count = 0 : 移除表中所有与 value 相等的值:lrem key count value,count:正数负数决定移除的方向,count:绝对值决定移除的数量

          返回集合中,下标为index的元素: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)通过命令动态调整密码:但这只是临时的密码,当服务器重启的时候密码会失效,所以在设置密码后不用重启

              将密码设置为123456:CONFIG SET requirepass 123456

              清除密码:CONFIG SET requirepass ""

              输入密码进行验证:AUTH 123456

方式(2)通过配置文件设置密码,这个密码是长久有效的,需要重新启动服务器

             在配置文件redis.conf中增加一行代码:requirepass 123456

             输入密码进行验证:AUTH 123456

(5)持久化配置

两种方式:(1)更新日志:.aof:appendonly yes/no

                  (2)数据文件:.rdb:在指定的时间间隔内生成数据集的时间点快照,默认开启该模式,需要满足一定条件才能执行持久化

都是需要在redis.conf中进行配置

(6)淘汰策略

因为数据是存在内存中的,为了确保数据的有效性,确保数据的优化,所以选择合适的淘汰策略进行淘汰,当redis存放的数据到达配置的最大内容后,会按照配置淘汰策略进行淘汰

(1)volatile-lru:从已设置过期时间的数据集中挑选最近最少使用的数据淘汰

(2)volatile-ttl:从已设置过期时间的数据集中挑选将要过期的数据淘汰

(3)allkeys-lru:从数据集中挑选最近最少使用的数据淘汰(常用)