windows
下载
https://github.com/microsoftarchive/redis/releases/tag/win-3.2.100
然后解压
打开服务
然后打开客服端
Linux
下载地址
https://download.redis.io/releases/redis-6.2.5.tar.gz
https://mirrors.huaweicloud.com/redis/镜像
然后传到服务器上
移动到opt目录下
mv redis-6.2.5.tar.gz /opt
解压安装包
tar -zxvf redis-6.2.5.tar.gz
解压完进去
安装
yum install gcc-c++
然后配置环境
make
make 确认一下 可有可无
make install
这就安装完毕了
默认安装路径
/usr/local/bin
然后在这个里面建一个文件夹把 redis.conf 复制过去
mkdir lybconfig
cp /opt/redis-6.2.5/redis.conf lybconfig/
修改一下redis.conf改成以后台方式启动
保存退出
开启服务
redis-server lybconfig/redis.conf 用哪个开启服务
开启客户端
redis-cli -p 6379
关闭服务
五大基本类型
看存在不
move name 1 删除
EXPIRE name 10 多久过期 expire
ttl name 离过期还有多久
127.0.0.1:6379> set age 20 OK 127.0.0.1:6379> TYPE age
String
get name显示全部
127.0.0.1:6379> APPEND name love
List
lpush list one#放左边 left
lrange list 0 -1显示全部
放入值 --------------------------------------------------------------------------------------- 127.0.0.1:6379> lpush list one
set
集合
SADD sets aaa#添加
smembers k显示
127.0.0.1:6379> SADD sets aaa
hash
哈希 有名字有地方
一一对应
名字+地方 = 一个值
一个哈希可以有多个地方 一个地方一个值
zset
三种特殊类型
地理空间 Geospatial
底成是zset
127.0.0.1:6379> geoadd china 116.397128 39.916527 beijing 121.478423671875 31.22694067865231 shanghai (integer) 2
基数统计 Hyperloglog
有0.81%的错误
有点像集合 不重复
127.0.0.1:6379> PFADD one aaa b ccc d
Bitmaps
可以理解为 1做了 0没做
setbit sign 6 1
事务
单条是保证原子性
但是整个事务不保证原子性
127.0.0.1:6379> multi
- 编译型异常事务中所有命令都不会执行 (代码有问题 ,命令有问题)
- 运行时异常(1/0)错误的不执行,其他的照样执行
锁
watch相当于加了个乐观锁
127.0.0.1:6379> WATCH k1
unwatch
刷新一个事务中已被监视的所有key。
如果执行
Jedis
先保证redis服务是开启的
创建一个maven项目
导包
<dependencies>
创建一个类
里面的命令和redis里面的一样不过换成了方法
package com.hkd; import redis.clients.jedis.Jedis; public class TestPing { public static void main(String[] args) { Jedis jedis = new Jedis("127.0.0.1",6379); System.out.println(jedis.ping()); } }
里面的事务
package com.hkd; import com.alibaba.fastjson.JSONObject; import redis.clients.jedis.Jedis; import redis.clients.jedis.Transaction;
Spring-Boot整合redis
Spring-Boot 2.x以后默认使用的是Lettuce
使用jedis:Jedis在实现上是直接连接的redis server,如果在多线程环境下是非线程安全的,这个时候只有使用连接池,为每个Jedis实例增加物理连接使用Lettuce:Lettuce的连接是基于Netty的,连接实例(StatefulRedisConnection)可以在多个线程间并发访问,应为StatefulRedisConnection是线程安全的,所以一个连接实例
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-data-redisartifactId>
dependency>
自定义RedisTemplate
就是为了不乱码
package com.hkd.config; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.ObjectMapper; 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.Jackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; import java.net.UnknownHostException;
Redis工具类
Redis持久化
因为redis不是一个数据库 他的数据是放在内存里面的(断电即失)
所有要把他存起来也就是持久化
然后有两种方法各有千秋
RDB机制(Redis DataBase) 默认
好处 存取效率高恢复快 坏处 丢的数据可能比较多(比aof多 )
你用redis写数据,数据是在内存里面的(断电即失)
然后RDB机制会再运行一个线程fork 满足一定条件会把数据保存到一个文件里面这样就可以保存数据了
但是万一还没有到下一次保存的时间突然断电了就会丢失一部分数据
就是用快照的方式保存下来
RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘。也是默认的持久化方式,这种方式是就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。
就是把里面的数据保存到文件里面然后下次读的时候再读取文件
多少秒 改几次 的情况下保存一次
快照触发机制
- 1.满足设置的触发条件
- 2.使用了flushall命令
- 3.关闭redis的时候(shutdown)
满足条件就保存下来
就算关机了也没时
数据恢复
因为数据存在dump.rdb
redis会读取这个文件把数据读进去
这个文件是在一个特定的位置下的 ,一般不用管 /usr/local/bin
AOF机制(Append Only File)
好处是数据丢失的少(最多丢一秒数据) 缺点是恢复数据慢 生成的文件大
将所有的命令都记下来 只记写入 不计读 读对数据不影响
有点像历史记录
然后恢复的时候全部重新执行一遍 肯定慢
默认关闭
要是开启这个设置需要重启redis
重启完
要是这个文件被破坏了就启动不了redis了
怎么修复
redis-check-aof –fix appendonly.aof
消息订阅
PSUBSCRIBE pattern [pattern …] #订阅一个或多个符合给定模式的频道;
PUBSUB subcommand [argument [argument …]] #查看订阅与发布系统状态;
PUBLISH channel message #将信息发送到指定的频道;
PUNSUBSCRIBE [pattern [pattern …]] #退订所有给定模式的频道;
UBSCRIBE channel [channel …] #订阅给定的一个或多个频道的信息;
UNSUBSCRIBE [channel [channel …]] #指退订给定的频道;
订阅端 127.0.0.1:6379> SUBSCRIBE lyb Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "lyb" 3) (integer) 1 1) "message" 2) "lyb" 3) "hello" Ctrl-C 退出 发布端 发之后会收到 127.0.0.1:6379> PUBLISH lyb "hello" (integer) 1
UNSUBSCRIBE () 退订 某一个 要不然就是全退
主从复制
Original: https://www.cnblogs.com/bxl-lyb/p/15967473.html
Author: 木子一十甫寸
Title: Redis基本操作
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/684833/
转载文章受原作者版权保护。转载请注明原作者出处!