一.Redis介绍
说明:此文档主要内容是B站上的一个Redis入门教程的一个笔记记录
1.1引言
1.1.1现实需求与矛盾
1.由于用户量增大,请求数量增大,数据压力过大
2.多台服务器数据不同步
3.多台服务器的锁不存在互斥性
1.1.2解决方案
1.Redis是基于内存存储和读取数据的
2.可以将之前存放在session中的共享数据统一存放在Redis中
3.Redis基于用户请求是单线程的
1.2NoSQL介绍
NoSQL,(Not Only SQL),可以理解为非关系型数据库,区别于关系型数据库,只是做一个区分,主要分为:
1.key-value :Redis
2.文档型数据库:Slor,Mongodb
3.面向列:Hbase
4.图形化:Neo4j
1.3Redis介绍
Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:
- Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
- Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份。
二.Redis安装
2.1安装Redis
在csdn找教程,github,镜像网站与官网找安装包与教程操作
尽量在Linux虚拟机上安装
version:5.0.7
image:daocloud.io/library/redis:5.0.7
restart:always
container_name:redis
envirment:
-TZ=Aisa/Shanghai
ports:
-6379:6379
安装图形化用户界面,gitHub
2.2连接Redis
windows环境下一键安装后,在命令行界面输入命令启动服务,操作细节就不再多赘述,没有加入Path路径下使用命令要先到Redis安装目录下
执行以下命令
redis-server.exe redis.windows.conf
出现以下界面表示成功
注意事项:
服务启动后不能关掉CMD窗口,关闭后redis服务也会同时关闭。为了方便可以将redis添加到Windows服务中,添加命令如下
redis-server.exe --service-install redis.windows.conf --loglevel verbose
常用命令:
停止服务
redis-server --service-stop
启动服务
redis-server --service-start
客户端启动
redis-cli
2.3使用图形界面
下载安装redis desktop manager,新版本收费,在github上可以找到收费之前的版本。也可以选择其他的工具,一键安装,连接也很简单
三.Redis常用命令
3.1 Redis存储数据的结构
3.1.1.key-string:一个key对应一个值(最常用)
3.1.2.key-hash:一个key对应一个map(对象数据)
3.1.3.key-list:一个key对应一个列表(可以实现栈和队列)
3.1.4.key-set:一个key对应一个集合(并,差,交的操作)
3.1.5.key-zset:一个key对应一个有序集合(排行榜,积分存储)
3.2 string常用命令
#1.添加值
set key value
#2.取值
get key
#3.批量操作
mset key value [key value ...]
mget key [key ...]
#4.自增命令(自增1)
incr key
#5.自减命令(自减1)
decr key
#6.自增或自减指定数量
incrby key increment
decrby key increment
#7.设置值的同时指定生存时间(添加数据时尽量设置生存时间)
setex key second value
#8.设置值,若当前key存在,什么也不做,否则添加
setnx key value
#9.在key对应的value后,追加内容
append key value
#10.查看value字符串的长度
strlen key
3.3 hash常用命令
#1.存储数据
hset key field value
#2.获取数据
hget key field
#3.批量操作
hmset key field value [field value ...]
hmget key field [field ...]
#4.自增(指定大小),不要对字符串类型自增
hincrby key field increment
#5. 设置值,若key - field不存在,添加,反之什么也不做
hsetnx key field value
#6.检查field是否存在
hexists key field
#7.删除key对应的某一个或多个field
hdel key field [field]
#8.获取当前hash结构中全部的field和value
hgetall key
#9.获取全部的field
hkeys key
#10.获取全部value
hvals key
#11.获取field数量
hlen key
3.4 list常用命令
#1.存储数据(l左侧插入,r右侧插入)
lpush key value [value ...]
rpush key value [value ...]
#2.验证插入(key不存在,undo,key存在且为list结构时,插入)
lpushx key value
rpushx key value
#3.指定索引插入(会覆盖原来索引元素值,类似数组操作)
lset key index value
#4.弹栈方式获取数据(获取并移除,类似出栈)
lpop key
rpop key
#5.指定索引范围数据(与python索引结构类似,正数左起始,负数右起始)
lrange key start stop
#6.获取指定索引数据
lindex key index
#7.获取列表长度
llen key
#8.删除列表数据(删除count个数的value值,count为正,左边删,负,右边删,count==0,删除全部数据)
lrem key count value
#9.保留指定索引范围类得数据,超出部分移除
ltrim key start stop
#10.将一个列表的最后一个数据放到另一个列表的头部(原子操作)
rpoplpush list1 list2
3.5 set常用命令
#1.存储数据
sadd key member [member ...]
#2.获取数据(全部)
smembers key
#3.随机获取一个数据(获取并移除,默认弹一个)
spop key [count]
#4.多个set取交集
sinter set1 set2 ...
#5.并集(所有集合的去重)
sunion set1 set2 ...
#6.差集(多个集合不一样的数据,注意运算顺序)
sdiff set1 set2 ...
#6.删除数据(支持批量操作)
srem key member [member...]
#7.查看集合是否包含某个值
sismember key member
3.6 zset常用命令
#1.添加数据
zadd key score member [score member ...]
#2.修改score(member存在于key,正常增加,不存在,实现添加)
zincrby key increment member
#3.查看指定member的score
zscore key member
#4.获取zset中数据的量
zcart key
#5.根据score得范围查询member的数量(左右取闭区间)
zcount key min max
#6.删除zset中的成员
zrem key member [member...]
#7.根据score升序,获取指定范围内数据(加withscores后会返回score+member,不加返回member)
zrange key start stop [withscores]
#8.降序
zrevrange key start stop [withscores]
#9.根据score的范围获取数据(limit参数部分类似mysql,加(表示开区间,)表示闭区间,最大值+inf,最小值-inf)
zrangebyscore key min max [withscores] [limit offset count]
#10.根据score的范围获取数据(参数位置改变)
zrangebyscore key max min [withscores] [limit offset count]
3.7 key的常用命令
#1.查看全部key(pattern:*,xxx*,*xxx.通配符)
keys pattern
#2.查看某个key是否存在(1,存在;0,不存在)
exists key
#3.删除key(支持批量操作)
del key [key...]
#4.设置key的生存时间(秒,毫秒级别)
expire key second
pexpire key milliseconds
#5.设置key的生存时间(到某一个时间点,单位为s,ms)
expireat key timestamp
pexpireat key milliseconds
#6.查看key的剩余生存时间(单位s,ms,-2当前key不存在,-1未设置生存时间,否则返回具体剩余时间)
ttl key
pttl key
#7.移除key的生存时间(1-移除成功;0-key不存在生存时间或key不存在)
persist key
#8.选择操作的库(共有16个库,默认0号库)
select 0~15
#9.移动key到另外一个库中
move key db
3.8 库的常用命令
#1.清空当前所在的库
flushdb
#2.清空全部数据库
flushall
#3.查看当前所在库有多少个key
dbsize
#4.查看最后一次操作的时间(保存在磁盘上的时间)
lastsave
#5.实时监控Redis服务收到的目录
monitor
四.Java连接Redis
有Jedis 连接Redis与Lettuce连接,使用Jedis,其方法对应redis基础命令操作
4.1 Jedis连接Redis
-
创建maven项目
-
导入依赖(Jedis,junit,lombok,spring-context,fastjson)
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <encoding>UTF-8</encoding> <java.version>15</java.version> <maven.compiler.source>15</maven.compiler.source