Redis
Redis介绍
1.引言
1.由于用户量过大,请求量也随之增大,数据压力过大
2.多台服务器之间,数据不同步
3.多台服务器之间的锁,已经不存在互斥性了
2.NoSQL
Redis是可以一款NoSQL
NoSQL->非关系型数据库->not only SQL
- 1.key-value:redis
- 2.文档型:ElasticSearch,Solr,MongoDB
- 3.面向列:Hbase,Cassandra
- 4.图形化:Neo4j
除了关系型数据库都是非关系型数据库
NoSQL只是一种概念,泛指非关系型数据库和关系型数据库做一个区分
3.Redis介绍
一位意大利人,在开发一款LLOOGG的统计页面,因为MySQL性能不好,自己研发了一款非关系型数据库,命名为Redis
Redis(Remote Dictionary Server)即远程字典服务,Redis是由c语言编写的,Redis是一款key-value的NoSQL,而且Redis基于内存存储数据的,Redis还提供了多种持久化机制,性能可以达到110000/s读取数据以及81000/1s写入数据,Redis还提供了主从,哨兵以及集群的搭建方式,可以更方便的横向扩展以及垂直扩展
Redis安装
1.安装Redis
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
2.使用redis-cli连接redis
进入redis容器内部
docker exec -it 容器id bash
在容器内部,使用redis-cli连接
3.使用图形化界面连接redis
Redis常用命令
1.Redis存储数据结构
常用5中数据结构
- key-string:一个key对应一个值 (最常用,一般用于存储一个值)
- key-hash:一个key对应一个map(储存一个对象数据)
- key-list:一个key对应一个列表(使用list结构实现栈和队列结构)
- key-set:一个key对应一个集合(交集,差集和并集的操作)
- key-zset:一个key对应一个有序的集合(排行榜)
另外三种数据结构
HyperLogLog:计算近似值
GEO:地理位置
BIT:一般存储的也是一个字符串,存储的是一个byte[]
2.string的常用命令
# 1.添加值
set key value
# 2.取值
get key
# 3.批量操作
mset key vlue [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存在的话,什么事都不做,如果这个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 [filed...]
# 4.自增
hincrby key field increment
# 5.设置值(如果key-field不存在,那么就正常添加,如果存在就不做任何事情)
hsetnx key field value
# 6.检查field是否存在
hexists key field
# 7.删除key对应的某一个field
hdel key 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.修改数据(在存储数据时,指定好的你的索引位置)
lset key index value
# 4.弹栈方式获取数据(左侧弹出数据,右侧弹出数据)
lpop key
rpop key
# 5.获取指定索引范围的数据(star从0开始,stop输入-1,代表最后一个,倒数第二个为-2)
lrange key start stop
# 6.获取指定索引位置的数据
lindex key index
# 7.获取整个列表的长度
llen key
# 8.删除列表中的数据(删除当前列表中count个value的值,count>0从左侧往右侧删除,反之亦然,count==0删除全部)
lrem key count value
# 9.保留列表中的数据(范围外的删除)
ltrim key start stop
# 10.将一个列表中最后一个数据,插入到另外一个列表的头部位置
rpoplpush list1 list2
5.set常用命令
# 1.存储数据
sadd key member [menmber...]
# 2.获取数据(获取全部数据)
smember key
# 3.随机获取一个数据(获取的同时移除数据,count默认为1)
spop key [count]
# 4.交集(取多个set集合交集)
sinter set1 set2...
# 5.并集(获取全部集合中的数据)
sunion set1 set2...
# 6.差集(获取多个集合中不一样的数据)
sdiff set1 set2...
# 7.删除数据
srem key number [menmber...]
# 8.查看当前的set集合中是否包含这个值
sismember key member
zset的常用命令
# 1.添加数据(score必须是数值,menber不允许重复的)
zadd key score menber [score member]
# 2.修改member的分数(如果member是存放在key中的,正常增加分数,如果member不存在,这个命令就相当于zadd)
zincrby key increment menber
# 3.查看指定的member的分数
zscore key member
# 4.获取zset中数据的数量
zcard key
# 5.根据score的范围查询menber数量
zcount key min max
# 6.删除zset中的成员
zrem key member [member...]
7.key的命令
# 1.查看Redis中的全部key(pattern:*,xxx*,*xxx)
key pattern
# 2.查看走一个key是否存在(1——key存在,0——key不存在)
exists key
#3.删除key
del key [key...]
库的常用命令
# 1.清空当前的数据库
flushdb
# 2.清空全部数据库
flushall
# 3.查看当前数据库中有多少个key
dbsize
# 4.查看最后一次操作时间
lastsave
# 5.实时监控Redis服务接收到的目录
monitor
Java连接Redis
Jedis连接Redis,Lettuce连接Redis
1.Jedis连接Redis
1.创建maven项目
2.导入需要的依赖
<dependencies>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13