什么是Redis?
redis是一个基于内存的key-value结构数据库。
- 基于内存存储,读写性能高
- 适合存储热点数据(热点商品、资讯、新闻)
- 企业应用广泛
Redis入门
-
redis简介
redis是一个开源的内存中的数据结构存储系统,数据库、缓存和消息中间件 (非关系型数据库)
- 关系型数据库(RDBMS)
- mysql
- oracle
- DB2
- SQLServer
- 非关系型数据库(NoSql)
- redis
- MongoDB
- memcached
- redis应用场景
- 缓存
- 任务队列
- 消息队列
- 分布式锁
- 关系型数据库(RDBMS)
-
redis下载与安装
- window下安装(比较简单)
- Linux下安装
- 将redis安装包上传到Linux
- 解压安装包,命令: tar -zxvf redis -C /usr/local
- 安装redis的依赖环境gcc ,命令:yum install gcc-c++
- 进入/usr/local/redis-4.0.0,进行编译,命令:make
- 进入redis的src目录,进行安装,命令:make install
-
redis服务启动与停止
- Linux中redis服务启动,可以使用redis-server,默认端口号为6379
- ctrl+c停止redis服务
注意:如果需要进行远程访问,这时我们需要进行redis远程校验密码设置
-
进行redis校验密码设置:(操作文件redis.conf)将requiredpass删除注释,后面设置密码
-
开启redis远程访问服务 (操作文件redis.conf)将bind 127.0.0.1 进行注释,这样就可以远程访问了!!!注意关防火墙,或者开放所需要的端口
./redis-cli -h localhost -p 6379 -a 123456 本地访问(如果远程访问,将localhost改为ip地址)
访问时报错
(error) NOAUTH Authentication required.
可以输入命令:auth 123456 (密码)
数据类型
-
介绍
redis存储的是key-value结构的数据,其中key是字符串类型,value有5种常用的数据类型:
- 字符串 String
- 哈希 hash
- 列表 list
- 集合 set
- 有序集合 sorted set
-
redis五种常用数据类型
- string普通字符串,常用 (key:string)
- hash 适合存储对象 (key:{(key:value),(key:value),…})
- list 按照插入顺序排序,可以有重复元素 (key:[str,str2,…])
- set无序集合,没有重复元素
- sorted set有序集合,没有重复元素
常用命令
-
字符串String操作命令
- set key value 设置指定key的值
- get key 获取指定key的值
- setex key seconds value 设置指定key的值,并将key的过期时间设为seconds秒
- setnx key value 只有在key不存在时设置key的值
-
哈希hash操作命令
-
redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象,常用命令:
hset key field value 将哈希表key中的字段field的值设为value
hget key field 获取存储在哈希表中的指定字段的值
hdel key field 删除存储在哈希表中的指定字段
hkeys key 获取哈希表中所有字段
hvals key 获取哈希表中所有值
hgetall key 获取在哈希表中指定key的所有字段和值
-
-
列表list操作命令
-
redis列表是简单的字符串列表,按照插入顺序排序,常用命令:
lpush key value1 [value2] 将一个或多个值插入到列表头部
lrange key start stop 获取列表指定范围内的元素
rpop key 移除并获取列表最后一个元素
llen key 获取列表长度
brpop key1[key2] timeout 移出并获取的最后一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
-
-
集合set操作命令
-
redis set 是string类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据,常用命令:
sadd key member1 [member2] 向集合添加一个或多个成员
smembers key 返回集合中的所有成员
scard key 获取集合的成员数
sinter key1 [key2] 返回给定所有集合的交集
sunion key1 [key2] 返回所有给定集合的并集
sdiff key1 [key2] 返回给定所有集合的差集
srem key member1 [member2] 移除集合中一个或多个成员
-
-
有序集合sorted set操作命令
-
redis sorted set 有序集合是string类型元素的集合,且不允许重复的成员。每个元素都会关联一个double类型的分数(score)。redis正是通过分数来为集合中的成员进行从小到大排序。有序集合的成员是唯一的,但分数却可以重复。
常用命令:
zadd key score1 member1 [score2 member2] 向有序集合添加一个或多个成员,或者更新已存在成员的分数
zrange key start stop [withscores] 通过索引区间返回有序集合中指定区间内的成员
zincrby key increment member 有序集合中对指定成员的分数加上增量increment
zrem key member [member …] 移除有序集合中的一个或者多个成员
-
-
通用命令
keys pattern 查找所有符合给定模式(pattern)的key
exists key 检查给定key是否存在
type key 返回key所存储的值的类型
ttl key 返回给定key的所剩生存时间(TTL,time to live),以秒为单位
del key 该命令用于在key存在是删除key
在java中操作Redis
-
介绍
- Redis的java客户端很多,官方推荐的有三种:
- Jedis
- Lettuce
- Redisson
Spring对Redis客户端进行了整合,提供了spring data redis ,在spring boot项目中还提供了对应的starter,即spring-boot-starter-data-redis
- Redis的java客户端很多,官方推荐的有三种:
-
Jedis
Jedis的maven坐标:
redis.clients
jedis
2.8.0
使用Jedis操作redis的步骤:
- 获取连接
- 执行操作
- 关闭连接
-
Spring Data Redis
在springboot项目中,可以使用spring data redis来来简化redis操作,maven坐标:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
Spring data redis中提供了一个高度封装的类:RedisTemplate,针对jedis客户端中大量api进行了归类封装,将同一类型操作封装为operation接口,具体分裂如下:
- ValueOperations:简单K-V操作
- SetOperations:set类型数据操作
- ZSetOperations:zset类型数据操作
- HashOperations:针对map类型的数据操作
- ListOperations:针对list类型的数据操作
在程序中使用redisTemplate时,程序设置key 和value时默认调用序列化,从而导致值发生改变,这时需要更改key序列化器,而value不需要更改序列化器,因为value在get的时候会进行反序列化。