Redis数据库

1.redis简介

关于关系型数据库和nosql数据库:关系型数据库是基于关系表的数据库,最终会将数据持久化到磁盘上,而nosql数据      库是基于特殊的结构,并将数据存储到内存的数据库。

nosql数据库优点:性能优于普通数据库,安全性低于普通数据库在实际开发中一个项目中nosql和关系型数据库会一起使用,达到性能和安全性的双保证。

redis就是nosql数据库的一种。

 

2>redis的安装

1)安装redis编译的c环境,yum install gcc-c++
2)将redis-2.6.16.tar.gz上传到Linux系统中
3)解压到/usr/local下  tar -xvf redis-2.6.16.tar.gz -C /usr/local
4)进入redis-2.6.16目录 使用make命令编译redis
5)在redis-2.6.16目录中 使用make PREFIX=/usr/local/redis install命令安装redis到/usr/local/redis中
6)拷贝redis-2.6.16中的redis.conf到安装目录redis中

 

2.redis的启动与关闭

前端启动:在redis的安装目录bin下直接启动redis-server

[root@localhost bin]# ./redis-server 

后台启动:把/root/redis-3.0.0/redis.conf复制到/usr/local/redis/bin目录下,然后修改redis.conf配置文件(daemonize 改成 yes)

[root@localhost bin]# ./redis-server redis.conf

查看redis进程:

[root@localhost bin]# ps aux|grep redis

结束redis进程:

kill -9 进程的pid(加-9代表强制关闭,可不加)

 

2>启动redis客户端:

#默认连接localhost运行在6379端口的redis服务。
[root@localhost bin]# ./redis-cli 

远程连接其他服务器上的客户端:

[root@localhost bin]# ./redis-cli -h 192.168.25.153 -p 6379
-h:连接的服务器的地址
-p:服务的端口号

关闭redis客户端

[root@localhost bin]# ./redis-cli shutdown

 

3.redis的五种数据库类型

Redis中所有的数据都是字符串,所有的数据储存格式都是Key - Value。命令不区分大小写,key是区分大小写的。Redis是单线程的。Redis中不适合保存内容大的数据。

String(做缓存)、Hash(做缓存)、List(有序可重复)、Set(无需不重复)、SortedSet(有序不重复)

 

1>String:key-value(做缓存),常用数据类型

存值:set key名 value值

取值:get key名

自增:incr key名

自减:decr key名

删除:del key名

查看所有key: keys *

 

2>Hash:数据格式key-{key  value,key  value}(做缓存),相当于一个key对于一个map,map中还有key-value,使用hash对key进行归类,常用数据类型

存值: hset hash名  key名 value值, hset hash名  key名2 value值2

127.0.0.1:6379> hset myhash  naem admin
127.0.0.1:6379> hset myhash  age 18

取值:hget hash名  key名, hset hash名  key名2

127.0.0.1:6379> hget myhash name
127.0.0.1:6379> hget myhash age

获取指定hash中所有的key-value:hgetall hash名

127.0.0.1:6379> hgetall myhash

 

3>List:有顺序可重复

从左侧存值:lpush list名 值1 值2 值3 值4,从右侧:rpush list名 值1 值2 值3 值4

127.0.0.1:6379> lpush mylist a c b d

从左侧取值:lrange list名 0 -1,

127.0.0.1:6379> lrange mylist 0 -1

从左侧添加:lpushx key value

从右侧添加:rpushx key value

获取左侧第一个:lpop key

获取右侧第一个:rpop key

 

4>Set:无序不重复

存值:sadd key value1、value2

取值:smembers key

删除:srem key value

获取长度:scard key

差集:sdiff sdiff key1 key2

并集:sunion key1 key2

交集:sinter key1 key2

 

5>SortedSet:有序不重复,性能最低

存值:zadd key score member score2 member2

取值:zcount key min max(min max之间的数)

长度:zcard key

 

4redis的持久化

Redis的所有数据都是保存到内存中的。

Rdb:快照形式,定期把内存中当前时刻的数据保存到磁盘。Redis默认支持的持久化方案。

aof形式:append only file。把所有对redis数据库操作的命令,增删改操作的命令。保存到文件中。数据库恢复时把所有的命令执行一遍即可。

 

2>Rdb配置:在redis.conf配置文件中配置。

如果每秒有一个key改变了,那么每九百秒保存一次数据到磁盘

如果每秒有十个key改变了,那么每三百秒保存一次数据到磁盘

如果每秒有一万个key改变了,那么每六十秒保存一次数据到磁盘

 

3>aof配置

这样数据便会保存到appendonly.aof文件中(bin目录下)

 

5.redis集群

redis集群的架构图:假设五个redis服务器有一个出错了,其他四个会进行投票,超过半数就说明该服务器出错,所以redis集群最少为三个redis服务器,每个服务器还要有一个备份服务器(也就是需要六个redis服务器)

2>架构细节:

Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点

 

自己搭建集群:在一台linux服务器上面复制六份redis,然后修改他们的端口号和配置文件中cluster-enable yes(了解)

 

3>集群的使用:

六个redis中的任意一个redis-cli都可以连接集群,-c表示连接集群

[root@localhost redis-cluster]# redis01/redis-cli -p 7002 -c

 

6.Jedis的使用(划重点)

单机普通方式使用jedis:

	@Test
	public void testJedis(){
		//第一步:创建一个jedis对象,需要指定服务端ip及端口
		Jedis jedis = new Jedis("192.168.25.131",6379);
		//第二步:使用jedis对象操作数据库,每一个redis命令对应一个方法
		String str = jedis.get("num");
		//第三步:打印结果
		System.out.println(str);
		//第四步:关闭jedis
		jedis.close();
	}

单机使用JedisPool连接池:

	@Test
	public void testJedisPool(){
		// 第一步:创建一个JedisPool对象。需要指定服务端的ip及端口。
		JedisPool jedisPool = new JedisPool("192.168.25.131",6379);
		// 第二步:从JedisPool中获得Jedis对象。
		Jedis jedis = jedisPool.getResource();
		// 第三步:使用Jedis操作redis服务器。
		jedis.set("name", "admin");
		String str = jedis.get("name");
		System.out.println(str);
		// 第四步:操作完毕后关闭jedis对象,连接池回收资源。
		jedis.close();
		// 第五步:关闭JedisPool对象。
		jedisPool.close();
	}

连接Redis集群:

	@Test
	public void testJedisCluster(){
//		第一步:使用JedisCluster对象。需要一个Set<HostAndPort>参数。Redis节点的列表。
		Set<HostAndPort> set = new HashSet<>();
		set.add(new HostAndPort("192.168.25.131", 7001));set.add(new HostAndPort("192.168.25.131", 7002));set.add(new HostAndPort("192.168.25.131", 7003));
		set.add(new HostAndPort("192.168.25.131", 7004));set.add(new HostAndPort("192.168.25.131", 7005));set.add(new HostAndPort("192.168.25.131", 7006));
		JedisCluster jedisCluster = new JedisCluster(set);
//		第二步:直接使用JedisCluster对象操作redis。在系统中单例存在。
		jedisCluster.set("admin", "123456");
		String str = jedisCluster.get("admin");
//		第三步:打印结果
		System.out.println(str);
//		第四步:系统关闭前,关闭JedisCluster对象。
		jedisCluster.close();
	}

 

7.redis的开发使用

使用缓存缓存:

		//查询缓存,如果存在直接return缓存
		try {
			String json = jedisClient.hget(CONTENT_LIST, cid+"");
			if(StringUtils.isNoneBlank(json)){
				List<TbContent> jsonToList = JsonUtils.jsonToList(json, TbContent.class);
				return jsonToList;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

添加缓存:

		//将数据放入redis缓存中
		try {
			jedisClient.hset(CONTENT_LIST, cid+"", JsonUtils.objectToJson(list));
                //设置过期时间,单位s
			jedisClient.expire(CONTENT_LIST, 3600);
		} catch (Exception e) {
			e.printStackTrace();
		}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值