Redis 是一个基于内存的key-value结构的数据库
一、redis的安装
1.1、安装步骤
1)安装Redis依赖
Redis是基于c语言编写的,因此需要安装对应的gcc环境
2)进入/usr/local/src/目录上传并解压安装包
解压:
3)解压成功后进入解压的文件目录
运行编译指令:
注意:如果没有报错,表现安装成功,默认安装路径为/user/lcoal/bin目录下
1.2、启动方式
1)前台启动
前台启动,会阻塞整个窗口,窗口关闭大概克制,Redis也会克制
2)配景启动
修改Redis的配置文件,配置文件就在解压的安装包下,名称为redis.conf,修改配置文件,一样平常先辈行备份
- # 将守护进程修改为yes就可以在后台运行
- daemonize yes
复制代码 修改成功后启动redis时,只需要在下令后面加上配置文件名
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下令操纵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镜像:拉取官方的最新版本的镜像
- 查看redis镜像:查看是否已安装了 redis
- 运行容器
- docker run -itd --name myRedis -p 6379:6379 redis
复制代码 - 查看容器安装成功
支持长途访问:
- 安装redis镜像:拉取官方的最新版本的镜像
- 新建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 123456 //密码
复制代码 注意:
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
复制代码 - 启动成功,查看状态
二、常用指令
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的值设置为valuehget 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有序集合中对指定成员的分数加上增量increamentzrem 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的keyexists 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:
- host: IP地址
- port: 端口号
- password: 密码
- database: 10 # 表示使用10号数据库,redis默认创建16个数据库
复制代码
- 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对象直接操纵
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |