大家好,欢迎来到IT知识分享网。
Redis 是一个基于内存的key-value结构的数据库
一、redis的安装
1.1、安装步骤
1)安装Redis依赖
Redis是基于c语言编写的,因此需要安装对应的gcc环境
yum install -y gcc tcl
2)进入/usr/local/src/目录上传并解压安装包
解压:
tar -zxvf 安装包名
3)解压成功后进入解压的文件目录
运行编译指令:
make && make install
注意:如果没有报错,表示安装成功,默认安装路径为/user/lcoal/bin目录下
1.2、启动方式
1)前台启动
前台启动,会阻塞整个窗口,窗口关闭或者停止,Redis也会停止
redis-server
2)后台启动
修改Redis的配置文件,配置文件就在解压的安装包下,名称为redis.conf,修改配置文件,一般先进行备份
# 将守护进程修改为yes就可以在后台运行 daemonize yes
修改成功后启动redis时,只需要在命令后面加上配置文件名
redis-server redis.con
1.3、开机自启
通过配置设置开机自启,创建一个系统服务文件
1)创建系统服务文件:
vi /etc/systemd/system/redis.service
2)设置文件内容为:
[Unit] Description=redis-server After=network.target [Service] Type=forking # 这行配置内容要根据redis的安装目录自定义路径 ExecStart=/usr/local/bin/redis-server /usr/local/src/redis-6.2.6/redis.conf PrivateTmp=true [Install] WantedBy=multi-user.target
3)重载系统服务:
systemctl daemon-reload
之后就可以使用systemctl命令操作redis
1.4、Redis其他配置
# 设置访问Redis的访问密码 requirepass 密码 # 监听端口 port 6379 # 设置允许访问的地址,默认是127.0.0.1,会导致只能在本地访问,设置为0.0.0.0就可以在任何IP下访问 bind 0.0.0.0 # 数据库数量,设置为1,代表只使用一个数据库,默认有16个库 databases 1 # 设置redis最大使用的内存 maxmemory 512mb # 日志文件,默认为空,不记录日志,可以指定日子文件名 logfile "文件名"
1.4、使用Docker安装
普通安装redis后,redis默认只能够本地连接(127.0.0.1),不能进行远程访问;
常规步骤:
- 安装redis镜像:拉取官方的最新版本的镜像
docker pull redis:latest - 查看redis镜像:查看是否已安装了 redis
docker images - 运行容器
docker run -itd --name myRedis -p 6379:6379 redis - 查看容器安装成功
docker ps
支持远程访问:
- 安装redis镜像:拉取官方的最新版本的镜像
docker pull redis:latest - 新建data和conf两个文件夹,位置随意
mkdir -p /root/docker/redis/data mkdir -p /root/docker/redis/conf - 增加配置文件 redis.conf
在刚才新建的redis/conf中新建文件redis.conf,内容如下:
#bind 127.0.0.1 //允许远程连接 protected-mode no appendonly yes //持久化 requirepass //密码
注意:
1、以上文件(redis.conf)内容行与行之间不能带有空格,否则新建容器后,容器状态为stopped,无法启动;
2、如果配置了redis密码,在配置时除了需要redis的ip端口号外,也需要配置redis密码;
- 创建redis容器并启动:
docker run --name myRedis -p 6379:6379 -v /root/docker/redis/data:/data -v /root/docker/redis/conf/redis.conf:/etc/redis/redis.conf -d redis redis-server /etc/redis/redis.conf - 启动成功,查看状态
docker ps
二、常用指令
2.1、常用数据类型
Redis存储的是key-value结构的数据,其中key是字符串类型,value有五种常用到的数据类型
- String —— 字符串类型(最常用)
- Hash —— 字典类型(最常用)
- List —— 列表类型
- Set —— 集合类型
- ZSet —— 有序集合类型
2.2、字符串常用命令
字符串类型string:普通字符串,Redis中最简单的数据类型
| 指令 | 说明 |
|---|---|
| set key value | 设置指定key的值 |
| get key | 获取指定key的值 |
| setex key seconds value | 设置置顶key的值,并将key的过期时间设置为seconds秒 |
| setnx key value | 只有在key不存在时设置value的值 |
e g:
// 设置指定key所对应值 set name lihua // 获取指定key的值 get name // 设置指定key的有效时间为20秒 setex age 20 zhang // 当设置的key不存在时才会设置对应的值,存在时不设置 setnx score 98 // 不存在时返回1,存在时返回0
2.3、哈希常用命令
哈希hash:也叫散列,类似于java中的HashMap结构,hash特别适合存储对象
| 指令 | 说明 |
|---|---|
| hset key field value | 将哈希表中的字段field的值设置为value |
| hget key field | 获取存储在哈希表中指定字段的值 |
| hdel key field | 删除存储在哈希表中指定字段的值 |
| hkeys key | 获取哈希表中的所有字段 |
| hvals key | 获取哈希表中所有值 |
e g:
// 设置ID属性为2的人的name属性为zhang hset 2 name zhang // 获取ID属性为2的问的name属性的值 hget 2 name // 删除id属性为2的人的name属性的值 hdel 2 name // 获取ID属性为2的人的所有字段 hkeys 2 // 获取ID属性为2的人的所有字段值 hvals 2
2.4、列表常用命令
列表list:按照插入顺序排序,可以有重复元素,类似java中的linkelist
| 指令 | 说明 |
|---|---|
| lpush key value1 [value2] | 将一个或多个值插入到列表的头部 |
| lrange key start stop | 获取列表指定范围内的元素 |
| rpop key | 移除并获取列表最后一个元素 |
| llen key | 获取类表的长度 |
eg:
// 向对应key中插如两个值 lpush mylist 23 43 // 获取对应key的指定范围内的元素(头部到尾部使用0 -1表示) lrange mylist 0 -1 // 删除并获取列表中的最后一个 rpop mylist // 获取指定列表的长度 llen mylist
2.5、集合常用命令
集合set:无序集合,没有重复元素,类似于java中的HashSet
| 指令 | 说明 |
|---|---|
| sadd key member1 [member2] | 向集合中添加一个或多个成员 |
| smembers key | 返回集合中的所有成员 |
| scard key | 获取集合的成员数 |
| sinter key1 [key2] | 返回所有指定集合的交集 |
| sunion key1 [key2] | 返回所有集合的并集 |
| srem key member1 [member2] | 删除集合中一个或多个成员 |
e g:
// 向集合中添加两个成员 sadd myset 223 344 // 返回集合中的所有元素 smembers myset // 获取集合的成员数 scard myset // 返回两个集合的交集 sinter myset1 myset2 // 返回两个集合的并集 sunion myset2 myset2 // 删除集合中的元素 srem myset 223
2.6、有序集合常用命令
有序集合sorted set |zset:集合中每个元素关联一个double类型的分数,根据分数生序排序,没有重复元素
| 指令 | 说明 |
|---|---|
| zadd key score1 member1 [score2 member2] | 向有序集合中体添加一个或多个成员 |
| zrange key start stop [withscores] | 通过索引区间返回有序集合中的指定区间的元素 |
| zincrby key increament member | 有序集合中对指定成员的分数加上增量increament |
| zrem key member [member] | 移除有序集合中的一个或者多个元素 |
eg:
// 向有序集合中添加一个成员并指定a的score值为10.0 zadd zset 10.0 a // 查看有序集合中的所有成员的元素 zrange zset 0 -1 // 查看有序集合中的所有成员的元素和分数 zrange zset 0 -1 withscore // 对有序成员中的a元素的分数值加5 zincrby zset 5.0 a // 删除有序集合中的指定元素 zrem zset b
2.7、通用命令
Redis的通用命令就是部分数据类型的,都可以使用的命令
| 命令 | 说明 |
|---|---|
| keys pattem | 查找所有符合给定模式pattem的key |
| exists key | 检查给定的key是否存在 |
| type key | 返回key所存储的数据类型 |
| del key1 [key2] | 删除指定存在的key |
eg:
// 返回所有的key keys * // 返回以set开头的所有key keys set* // 检查具体key是否存在 exists tex // 返回对应key存储的数据类型 type tex // 删除key del tex
三、在java程序中操作redis
在java程序中一般使用Spring Data Redis操作redis数据库
3.1、redis的java客户端
Redis的java客户端有很多,常用的有几种:
- Jedis
- Lettuce
- Spring Data Redis
Spring Data Redis是Spring的一部分,对Redis底层开发包进行了高度封装
3.2、Spring Data Redis的使用方法
操作步骤:
- 导入Spring Data Redis的maven坐标
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
- 配置Redis数据源
redis: host: IP地址 port: 端口号 password: 密码 database: 10 # 表示使用10号数据库,redis默认创建16个数据库
- 编写配置类,创建RedisTemplate对象
import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.StringRedisSerializer; / * Redis配置类 */ @Configuration @Slf4j public class RedisConfiguration { @Bean public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){ log.info("开始创建Redis模版对象···"); RedisTemplate redisTemplate = new RedisTemplate(); // 设置redis的链接工厂对象 redisTemplate.setConnectionFactory(redisConnectionFactory); // 设置redis key的序列化对象 redisTemplate.setKeySerializer(new StringRedisSerializer()); return redisTemplate; } }
- 通过RedisTemplate对象中的opsFor*来获取具体对象操作Redis,这里列举个别
/ * Redis测试类 */ @SpringBootTest public class RedisTemplateText { @Autowired private RedisTemplate redisTemplate; @Test public void textRedisType(){ / * 操作字符串类类型数据 */ // 添加字符串类型数据-并设置有效时间 redisTemplate.opsForValue().set("name","zhangshanc",20, TimeUnit.MILLISECONDS); // 对应key不存在时设置对应的key的值--对应redis中的setnx指令 redisTemplate.opsForValue().setIfAbsent("age","12"); / * 操作哈希类型数据--其他指令见名知意 */ // 添加hash类型的数据使用put--对应redis中的指令为hset redisTemplate.opsForHash().put("11","name","tom"); } }
注意:redis中通用类型的数据直接使用RedisTemplate对象直接操作
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/109940.html