一、Redis介绍
1.主要解决的问题:
- 用户数量大,请求量大,数据库读写压力大。
- 多台应用服务器之间数据不同步。
- 多台服务器之间的锁,已经不存在互斥性,无法保障线程安全的操作。
2.Redis-NoSQL数据库
- Redis是一款NoSql数据库(非关系型数据库)
- Key-Value:Redis。
- 文档型:ElasticSearch,Solr,MongoDB
- 面向列:HBASE, Cassandra
- 图形化:Neo4j
- 除了关系型数据库都是菲关系型数据库。
- NoSQL只是一种概念,泛指非关系非关系型数据库,和关系型数据库做区分
二、Redis安装
1. 官网下载直接安装 Redis下载地址
2.使用Docker-Compose安装
2.1 docker-compose.yml文件
version: '3.1'
services:
redis:
image: daocloud.io/library/redis:5.0.7
restart: always
container_name: redis
environment:
- TZ=Asia/Shanghai
ports:
-6379:6379
1.在LInux下建立docker-compose.yml文件
2.使用docker-compose up -d 命令启动docker容器
2.2使用redis-cli连接Redis
1.进入容器内部:docker exec -it 容器id bash
2.在容器内部使用redis-cli连接Redis
3.使用图形化工具连接Redis
三、Redis常用命令
1.Redis数据的存储结构
常用的五种数据结构:
key-string:一个key对应一个值
key-hash:一个key对应一个Map
key-list:一个key对用一个列表
key-set:一个key对应一个集合
key-zset:一个key对应一个有序的集合
另外三种数据结构HyperLogLog:计算近似值
GEO:地理位置
BIT:一般存储的是一个字符串,存储的是一个byte[]。
key-string:最常用,一般用于存储一个值。
key-hash:存储一个对象数据
key-list:使用list结构实现栈和队列结构
key-zset:排行榜,积分存储等操作
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. 设置值的同时,指定生存时间(每次向Redis中添加数据时,尽量设置生存时间)
setex key second value
# 8. 设置值,如果当前key不存在的话(存在的话,什么也不做,如果不存在,同set命令)
setnx key value
# 9. 在key对应的value后,追加内容(相当于字符串拼接)
append key value
# 10. 查看value字符串的长度
strlen key
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. 设置值(如果可以-field不存在,就正常添加,存在,什么也不做)
hsetnx key field value
# 6. 检查filed是否存在
hexists key field
# 7. 删除key对应的field,可以删除多个
hdel key field [field ...]
# 8. 获取当前hash结构中全部的field和value
hgetall key
# 9. 获取当前hash结构汇总全部的field
hkeys key
# 10. 获取当前hash结构中全部的value
hvals key
# 11. 获取当前hash结构中field的数量
hlen key
4、 list常用命令
# 1. 存储数据
# 左插入
lpush key value [value ...]
# 右插入
rpush key value [value ...]
# 2. 存储数据(如果key不存在,什么事都不做,如果key存在,但不是list结构,什么也不做)
lpushx key value
rpushx key value
# 3. 修改数据(在存储数据时,指定好你的索引位置,覆盖之前索引位置的数据,index超出整个列表的长度会失败)
lset key index value
# 4. 出栈方式获取数据(左侧出栈吗,右侧出栈)
lpop key
rpop key
# 5. 获取指定索引范围内的数据(start从0开始,stop输入-1,代表最后一个数,-2代表倒数第二个数)
lrange key start stop
# 6. 获取指定索引位置的数据
lindex key index
# 7. 获取整个列表的长度
llen key
# 8.删除列表中的数据(他是删除当前列表中的count个value值,count > 0从左侧向右删除,count < 0 从右向左删除,count == 0 删除全部的value)
lrem key count value
# 9. 保留列表中的数据(保留你指定索引范围内的数据,超过索引范围被移除掉)
ltrim key start stop
# 10. 将一个列表中的最后一个数据,插入到另外一个列表的头部位置
rpoplpush list1 list2
5、set常用命令
# 1. 存储数据
sadd key member [member ...]
# 2. 获取数据(获取全部数据)
smembers key
# 3. 随机获取一个数据(获取的同时,移除数据,count默认为1,代表弹出的数据量)
spop key [count]
# 4. 交集(去多个set集合交集)
sinter set1 set2
# 5. 并集(获取全部集合中的数据)
sunion set1 set2
# 6. 差集(获取多个集合中不一样的数据)
sdiff set1 set2
# 7. 删除数据
srem key member [member ...]
# 8. 查看当前set集合中是否包含此值
sismember key member
6 、zset的常用命令
# 1. 添加数据(score必须是数值。member不允许重复)
zadd key score member [score member]
# 2. 修改member的分数(如果member是存在于key中的,正常增加分数,如果member不存在,这个命令就相当于zadd)
zincrby key increment member
# 3. 查看指定的member的分数
zscore key member
# 4. 获取zset中数据的数量
zcard key
# 5. 根据score的范围查询member数量
zcount key min max
# 6. 删除zset中的成员
zrem key member [member ...]
# 7. 根据分数从小到大排序,获取指定范围内的数据(withscores如果添加这个参数,那么就会返回member对应的分数)
zrang key start stop [withscores]
# 8. 根据分数从大到小排序,获取指定范围内的数据(withscores如果添加这个参数,那么就会返回member对应的分数)
zrevrange key start stop [withscores]
# 9. 根据分数的返回去获取member(withscores代表同时返回score,添加limit,和MySQL中一样,如果不希望等于min或者max的值被查出来可以采用‘(分数’相当于 < 但是不等于的方式,最大值和最小值使用 +inf 和 -inf来表示)
zrangebyscore key min max [withscores] [limit offset count]
# 10. 根据分数的返回去获取member(withscores代表同时返回score,添加limit,就和mysql中一样)
zrangbyscore key max min[withscores] [limit offset count]
7、key的常用命令
# 1. 查看Redis中的全部的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的生存时间,单位为秒,单位为毫秒,设置能活到啥时候
expireat key timestamp
pexpireat key milliseconds
# 6. 查看key的剩余生存时间,单位秒,单位毫秒(-2 - 可以不存在,-1 - key没有设置生存时间,具体剩余的生存时间)
ttl key
pttl key
# 7 移除key的生存时间(1 - 移除成功, 0 - key不存在生存时间,key不存在)
persist key
# 8. 选择操作的库
select 0~15
# 9. 移动key到另外一个库中
move key db
8、Redis库常用命令
# 1. 清空当前所在的数据库
flushdb
# 2. 清空全部数据库
flushall
# 3. 查看当前数据库中有多少key
dbsize
# 4. 查看最后一次操作的时间(返回时间戳)
lastsave
# 5. 实时监控Redis服务接收到的命令
monitor
四、Java连接Redis
1.Jedis连接Redis
1.1 idea创建springboot项目添加依赖
<!--redis-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.2.0</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>