说明:数据库是项目中的基石,如果每一个请求都去访问数据库,会陡然增加数据库的压力,增加系统崩溃的风险。解决问题的方向有两个,一个是增加数据库,另一个就是减少对数据库的直接访问,做到没有必要,不访问数据库,这就是Redis的使用场景。Redis可以将数据存入到内存中,大大增加数据访问的速度。在项目中,可以先从Redis中取数据,Redis中没有再访问数据库。
下载安装
可从官网中下载(官网:https://redis.io/,中文网:https://www.redis.net.cn/),推荐下载稳定版
下载完成后,解压到一个没有中文的路径下,双击启动redis-server.exe,启动Redis服务,弹出以下界面,表示启动成功。需要知道的是,Redis默认使用的是6379端口,如果启动失败的话,需要考虑端口是否被其他应用所占用。
使用
Redis是非关系型数据库,是以“key-value”(key是String类型)的方式存储数据的,不存在数据库、表、字段、约束的概念,有即存即用的特点。在Redis目录中,双击打开客户端窗口,就可以使用。注意前面打开的启动窗口(redis-server.exe)不要关掉,关掉就表示停止Redis服务。
Redis中,有以下五种数据类型,在客户端窗口中可以输入对应的命令来操作:
字符串(String):普通字符串,Redis中最简单的数据类型;
哈希(hash):也叫散列,类似于Java中的HashMap;
列表(list):按照插入顺序排序,元素可重复,类似Java中的LinkeList;
集合(set):无序集合,元素不可重复,类似Java中的HashSet;
有序集合(sorted set/zset):集合中的每一个元素关联一个分数(score),按照分数生序排序,元素不可重复;
字符串操作命令
set key value:添加一个永久Key到Redis的内存中;如果Key已经存在,也会添加成功并且覆盖之前的value;
get key:从Redis中获取一个key对应的值 如果有值就返回值,没有key就返回nil;
setex key seconds value:添加一个有时效性的key到Redis中,单位是秒;
setnx key value:如果key不存在就可以添加成功,如果已存在就会返回0;
哈希操作命令
hset key field value:将哈希表key中的字段field的值设为value
hget key field:获取存储在哈希表中指定字段的值
hgetall key:获取哈希表的所有值
hdel key field:删除存储在哈希表中的指定字段
hkeys key:获取哈希表中所有字段
hvals key:获取哈希表中所有值
需要知道,哈希表中的值不能被覆盖,不允许对一个字段重复赋值
列表操作命令
lpush key value1 value2 value3 … :将一个或多个值从左边推入到列表中;
rpush key value1 value2 value3 … :将一个或多个值从右边推入到列表中,这样输入/输出的顺序就是一致的;
lrange key start stop:获取列表指定范围内的元素,-1表示最后一个元素
rpop key:移除并获取列表最后一个元素
llen key:获取列表长度;
brpop key timeout seconds:弹出列表的最后一个元素,如果列表没有元素,会阻塞列表直到等待超时或发现可弹出元素为止(可以打开两个客户端测试)
lrem key 删除个数 删除元素:删除个数可以为正数或者负数,正数为从左边起的几个,负数为从右边起的几个;
集合操作命令
sadd key value1 value2 …:向集合添加一个或多个成员;
smembers key:返回集合中的所有成员;
scard key:获取集合的成员数;
srem key member1 member2:移除集合中一个或多个成员;
sinter key1 key2:返回给定所有集合的交集;
sunion key1 key2:返回所有给定集合的并集;
有序集合操作命令
zadd key score1 member1 score2 member2:向有序集合中添加一个或多个成员;
zrange key start stop:通过索引区间返回有序集合中指定区间内的成员;
zincrby key increment member:有序集合中对指定成员的分数加上增量,增量可以是正数或负数;
zrem key member1 member2 …:移除有序集合中的一个或多个成员;
通用操作命令
keys *:查找Redis中的所有key值;
del key :根据key删除对应的数据;
exists key:检查给定key是否存在;
clear:清屏;
ttl key:查看一个key的存活剩余时间;
总结
应该考虑到,存入到Redis中的数据,是没有修改需求的,不然仅靠Redis提供的命令或者Java中的API来修改Redis中的数据,是非常麻烦的,命令远不及SQL语句强大。
【string命令】
set key value:添加数据;
get key:获取数据;
setex key seconds value:添加有时效性的数据;
setnx key value:添加数据,如果不存在添加成功,存在添加失败;
【hash命令】
hset key field value:添加数据;
hget key field:获取指定字段的值;
hgetall key:获取所有值(key+value);
hdel key field:删除指定字段的值;
hkeys key:获取所有key;
hvals key:获取所有值;
【list命令】
lpush key value1 value2 value3 … :添加数据;
lrange key start stop:获取指定范围的数据;
rpop key:弹出最后一个元素;
llen key:获取列表长度;
brpop key timeout seconds:弹出最后一个元素,没有元素的话则等待,直至超时或列表中存入元素;
lrem key 数量 元素:删除元素,数量为负数表示从右边开始,正数表示从左边开始;
【set命令】
sadd key value1 value2 …:添加元素;
smembers key:获取所有元素
scard key:获取元素的数量;
sinter key1 key2:返回给定所有集合的交集;
sunion key1 key2:返回所有给定集合的并集;
srem key member1 member2:删除元素;
【zset命令】
zadd key score1 member1 score2 member2:添加元素;
zrange key start stop:获取指定范围的元素;
zincrby key increment member:指定元素增加增量,增量可以是正数或负数;
zrem key member:删除元素;
【通用命令】
del key :删除数据;
keys *:查找所有key;
exists key:检查key是否存在;
ttl key:查看key的剩余存活时间;