JavaWeb--redis

本文全面介绍了Redis数据库,包括其作为非关系型数据库的特点、数据类型、应用场景、安装与配置、常用命令操作,以及如何实现数据的持久化。同时,还探讨了Java客户端Jedis的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

string类型的特殊操作:
	set key value : 保存一个值  eg:set name zhangsan
	set key "value" : 保存一个复杂值 eg: set name "Hello World"
     mset key1 value1 key2 value2... :一次保存多个值 eg: mset name zhangsan age 23
     get key : 获取一个值   eg: get name
     mget key1 key2 : 一次获取多个值   eg: mget name age
     append key value : 在原有的字符串末尾追加一段内容   eg: append name lishi
     getrange key start end : 从start开始,end结束,获取索引间的字符串(截取,这个不会索引越界异常) 
         eg: getrange name 0 2
     strlen key : 获取字符串的长度  eg: strlen name

	redis是一款非关系型数据库(NoSql),存储数据用的,特点是将数据以key-value的形式存入缓存中,速度非常快,read 11万次/s,write 8.1万次/s,五种数据类型:string,hash,list,set,zset,
两种持久化的方式:RDB数据快照,相当于保存当前的状态,下一次直接还原即可
AOF日志记录,记录每一步的操作,下一次一步步还原之前的操作

Redis

1. 概念: redis是一款高性能的NOSQL系列的非关系型数据库
	关系型数据库与NoSQL数据库并非对立而是互补的关系,即通常情况下使用关系型数据库,在适合使用NoSQL的时候使用NoSQL数据库,让NoSQL数据库对关系型数据库的不足进行弥补。
	一般会将数据存储在关系型数据库中,在nosql数据库中备份存储关系型数据库的数据


	1.1.什么是NOSQL
		NoSQL(NoSQL = Not Only SQL),意即“不仅仅是SQL”,是一项全新的数据库理念,泛指非关系型的数据库。
	1.2 什么是Redis
			1) 字符串类型 string
			2) 哈希类型 hash
			3) 列表类型 list
			4) 集合类型 set
			5) 有序集合类型 sortedset
		1.3.1 redis的应用场景
			•	缓存(数据查询、短连接、新闻内容、商品内容等等)
			•	聊天室的在线好友列表
			•	任务队列。(秒杀、抢购、12306等等)
			•	应用排行榜
			•	网站访问统计
			•	数据过期处理(可以精确到毫秒
			•	分布式集群架构中的session分离


2. 下载安装
	1. 官网:https://redis.io
	2. 中文网:http://www.redis.net.cn/
	3. 解压直接可以使用:
		* redis.windows.conf:配置文件
		* redis-cli.exe:redis的客户端
		* redis-server.exe:redis服务器端
	
3. 命令操作
	1. redis的数据结构:
		* redis存储的是:key,value格式的数据,其中key都是字符串,value有5种不同的数据结构
			* value的数据结构:
				1) 字符串类型 string
				2) 哈希类型 hash : map格式  
				3) 列表类型 list : linkedlist格式。支持重复元素
				4) 集合类型 set  : 不允许重复元素
				5) 有序集合类型 sortedset(zset):不允许重复元素,且元素有顺序
			*注意: 严格区分大小写
	2. 字符串类型 string
		1. 存储: set key value
			 set username zhangsan
		2. 获取: get key
			get username
		3. 删除: del key
		     del username
	3. 哈希类型 hash
		1. 存储: hset key field value
		      hset myhash username zhangsan
		2. 获取: 
			* hget key field: 获取指定的field对应的值
			hget myhash username
			* hgetall key:获取所有的field和value
			hgetall myhash
		3. 删除: hdel key field
			hdel myhash username
	4. 列表类型 list:可以添加一个元素到列表的头部(左边)或者尾部(右边)
		1. 添加:
			1. lpush key value: 将元素加入列表左表
			lpush mylist java
			2. rpush key value:将元素加入列表右边
			rpush mylist java
		2. 获取:
			* lrange key start end :范围获取
			lrange mylist 0 -1
			正数首元素: 0  负数尾元素:-1,所以取所有可以用0 -1表示 
		3. 删除:
			* lpop key: 删除列表最左边的元素,并将元素返回
			lpop mylist
			* rpop key: 删除列表最右边的元素,并将元素返回
			rpop mylist

	5. 集合类型 set : 不允许重复元素
		1. 存储:sadd key value
			sadd myset zhangsan
		2. 获取:smembers key:获取set集合中所有元素
		    smembers myset
		3. 删除:srem key value:删除set集合中的某个元素	
		    srem myset zhangsan
	6. 有序集合类型 sortedset(zset):不允许重复元素,且元素有顺序.每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
		1. 存储:zadd key score value
			 zadd myzadd 100 zhangsan	
		2. 获取:zrange key start end [withScores]
			zrange myzset 0 -1 
			zrange myzset 0 -1 withScores
		3. 删除:zrem key value ,(del key /rem key value)
			zrem myzset zhangsan
	7. 通用命令
		1. keys * : 查询所有的键
		   keys *
		2. type key : 获取键对应的value的类型
		   type myzset
		3. del key:删除指定的key value
		    del myzset 清空zset


4. 持久化
	1. redis是一个内存数据库,当redis服务器重启,或者电脑重启,数据会丢失,我们可以将redis内存中的数据持久化保存到硬盘的文件中。
	2. redis持久化机制:
		1. RDB:默认方式,不需要进行配置,默认就使用这种机制
			* 在一定的间隔时间中,检测key的变化情况,然后持久化数据
			1. 编辑redis.windwos.conf文件
				#   after 900 sec (15 min) if at least 1 key changed
				save 900 1
				#   after 300 sec (5 min) if at least 10 keys changed
				save 300 10
				#   after 60 sec if at least 10000 keys changed
				save 60 10000
				
			2. 在命令提示窗重新启动redis服务器,并指定配置文件名称
				D:\JavaWeb2018\day23_redis\资料\redis\windows-64\redis-2.8.9>
			redis-server.exe redis.windows.conf	
			
		2. AOF:日志记录的方式,可以记录每一条命令的操作。可以每一次命令操作后,持久化数据
			1. 编辑redis.windows.conf文件
				appendonly no(关闭aof) --> appendonly yes (开启aof)
				
				# appendfsync always : 每一次操作都进行持久化
				appendfsync everysec : 每隔一秒进行一次持久化
				# appendfsync no	 : 不进行持久化

5. Java客户端 Jedis
	* Jedis: 一款java操作redis数据库的工具.
	* 使用步骤:
		1. 下载jedis的jar包
		2. 使用
			//1. 获取连接
    		Jedis jedis = new Jedis("localhost",6379);
   			//2. 操作
   			jedis.set("username","zhangsan");
   			//可以使用setex()方法存储,指定过期时间,10second
   			jedis.setex("username",10,"zhangsan");
    		//3. 关闭连接
    		jedis.close();	

jedis连接池: JedisPool

jedisPoolUtils工具类:
public class JedisPoolUtils {
	private static JedisPool jedisPool;
	static{ //静态代码块,当前文件一被加载就执行
    //创建JedisPoolConfig对象
    JedisPoolConfig config = new JedisPoolConfig();
    //从jedis.properties中读取数据
    Properties properties = new Properties();
InputStream is =JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties");
     try {
            properties.load(is);
        } catch (IOException e) {
            e.printStackTrace();
      }
    //配置JedisPoolConfig,参数需要int类型,而加载来的是字符串类型的,所以需要解析
    config.setMaxTotal(Integer.parseInt(properties.getProperty("maxTotal")));
    config.setMaxIdle(Integer.parseInt(properties.getProperty("maxIdle")));
    //创建JedisPool对象
    JedisPool jedisPool = new JedisPool(config,properties.getProperty("host"),
Integer.parseInt(properties.getProperty("port")));
		}
	//创建一个静态方法,获取Jedis
    public static Jedis getResource(){
        return jedisPool.getResource();
    }
}
* 注意:使用redis缓存一些不经常发生变化的数据。
	* 数据库的数据一旦发生改变,则需要更新缓存。
		* 数据库的表执行 增删改的相关操作,需要将redis缓存数据情况,再次存入
		* 在service对应的增删改方法中,将redis数据删除。

redis操作海量数据

直接使用redis原生的set key方法进行存储,虽然也可以达到预期效果,但是插入1000万条数据,就相当于建立了1000万次连接,这样很浪费资源,因此可以使用管道来存储要插入的数据,然后建立一次连接,把管道发送过去,redis原生API不支持批量插入,但是支持管道
	Jedis jedis = new Jedis("127.0.0.1",6379);
	Pipeline pipeline = jedis.pipelined();
	//将数据打包进管道
	pipeline.set("key","value");
	.....
	//建立连接,发送管道
	//返回插入结果List<Object> list =  pipeline.syncAndReturnAll();
     或者    pipeline.sync();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值