Redis 基本用法

参考:https://baijiahao.baidu.com/s?id=1660009541007805174&wfr=spider&for=pc

Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。

  • Redis 与其他 key - value 缓存产品有以下三个特点:
  1. Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
  2. Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
  3. Redis支持数据的备份,即master-slave模式的数据备份。

关键词

  1. C语言编写, NoSQL
  2. 持久化:AOF,RDB
  3. 支持事务,原子性
  4. 可主从赋值,分布式缓存,高可用,并发10W QPS
  5. 单进程单线程,是线程安全的,采用 IO 多路复用机制

为什么用

  1. 高并发,高性能
  2. Java 自带的 缓存不具有一致性, redis 或 memcached 之类的称为分布式缓存
  3. Redis 直接自己构建了 VM 机制
  4. 支持数据持久化。可以将内存中数据保存在磁盘中,重启时加载。主从复制,哨兵,高可用。可以用作分布式锁。可以作为消息中间件使用,支持发布订阅。

存储

1. RDB:Redis DataBase 快照

按照一定的时间将内存的数据以快照的形式保存到硬盘中,对应产生的数据文件为dump.rdb。通过配置文件中的save参数来定义快照的周期。

2. AOF:Append Only File 持久化

将Redis执行的每次写命令记录到单独的日志文件中,当重启Redis会重新将持久化的日志中文件恢复数据。

  • 当两种方式同时开启时,数据恢复Redis会优先选择AOF恢复。

数据类型

Redis主要有5种数据类型,包括String,List,Set,Zset,Hash,满足大部分的使用要求
在这里插入图片描述

存储Java 对象

  1. 利用序列化和反序列化
  2. 将java对象转换为json字符串,利用json与java对象之间可以相互转换的方式进行存值和取值

参考: https://blog.csdn.net/u010502101/article/details/80552617

初次体验

windows版本

运行 Redis

redis-server.exe redis.windows.conf

在这里插入图片描述

再开一个cmd

redis-cli.exe -h 127.0.0.1 -p 6379

在这里插入图片描述

centos 7版本

建议下载版本 3:http://download.redis.io/releases/

$ wget http://download.redis.io/releases/redis-6.0.6.tar.gz
$ tar xzf redis-6.0.6.tar.gz
$ cd redis-6.0.6
$ make

如果出现报错:

yum -y install gcc automake autoconf libtool make
安装Redis 6.0以上版本需要升级gcc到5.3及以上,先检查gcc的版本是否低于5,如果是请先升级
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++
devtoolset-9-binutils
scl enable devtoolset-9 bash
需要注意的是scl命令启用只是临时的,退出shell或重启就会恢复原系统gcc版本。
如果要长期使用gcc 9.3的话:
echo “source /opt/rh/devtoolset-9/enable” >>/etc/profile
清理上次编译残留文件,重新编译,否则会报错
make distclean && make

The binaries that are now compiled are available in the src directory. Run Redis with:

$ src/redis-server redis.conf

后台启动 设置 redis.conf,daemonize的值改成yes即可
You can interact with Redis using the built-in client: (重新打开一个客户端)

$ src/redis-cli
redis> set foo bar
OK
redis> get foo
"bar"

配置文件 redis.conf

如果是 哨兵结点,就是 sentinel.conf 文件

# 哨兵结点配置 在 sentinel.conf 
sentinel monitor mymaster 10.1.4.141 6379 2
# slave 结点配置
slaveof 10.1.4.141 6379
#
port 6379
# 
daemonize yes
#
#bind 0.0.0.0

# 日志相关
loglevel notice
logfile ""

# RDB 配置
# 在[seconds]秒内如果发生了[changes]次数据修改,则进行一次RDB快照保存
# 可以配置多条save指令,让Redis执行多级的快照保存策略。
save [seconds] [changes]

#
dbfilename "dump-6379.rdb"

# AOF 默认是关闭的
# appendfsync no:不进行fsync,将flush文件的时机交给OS决定,速度最快
# appendfsync always:每写入一条日志就进行一次fsync操作,数据安全性最高,但速度最慢
# appendfsync everysec:折中的做法,交由后台线程每秒fsync一次

appendonly no

appendfilename "appendonly.aof"

appendfsync everysec

# 内存管理
maxmemory <bytes>
# 淘汰机制
#Redis提供了5种数据淘汰策略:
#	volatile-lru:使用LRU算法进行数据淘汰(淘汰上次使用时间最早的,且使用次数最少的key),只淘汰设定了有效期的
#	key allkeys-lru:使用LRU算法进行数据淘汰,所有的key都可以被淘汰
#	volatile-random:随机淘汰数据,只淘汰设定了有效期的
#	key allkeys-random:随机淘汰数据,所有的key都可以被淘汰
#	volatile-ttl:淘汰剩余有效期最短的key
maxmemory-policy volatile-lru 

后台运行 服务端

  1. 修改 配置 文件 ,后台 启动
vim /etc/redis.conf

找到 daemonize 属性 将no改为yes
注释掉 #bin 127.0.0.1

  1. 启动
src/redis-server /etc/redis.conf &
  1. 关闭
redis-cli -h 127.0.0.1 -p 6379 shutdown
redis-cli -h 127.0.0.1 -p 6379 -a password shutdown

更改配置文件

  1. 直接修改 redis.conf 文件并重启
  2. CONFIG 命令
    通过 redis-cli 进入redis后输入 eg: SET loglevel "notice"
    查配置,eg:config get stop-writes-on-bgsave-error
    使用 * 号获取所有配置项:CONFIG GET *

Memcache和redis的区别:

数据支持的类型:

  • redis不仅仅支持简单的k/v类型的数据,同时还支持list、set、zset、hash等数据结构的存储;
  • memcache只支持简单的k/v类型的数据,key和value都是string类型可靠性:memcache不支持数据持久化,断电或重启后数据消失,但其稳定性是有保证的;redis支持数据持久化和数据恢复,允许单点故障,但是同时也会付出性能的代价性能上:对于存储大数据,memcache的性能要高于redis

应用场景:

  • Memcache:适合多读少写,大数据量的情况(一些官网的文章信息等)
  • Redis:适用于对读写效率要求高、数据处理业务复杂、安全性要求较高的系统
  • 案例:分布式系统,存在session之间的共享问题,因此在做单点登录的时候,我们利用redis来模拟了session的共享,来存储用户的信息,实现不同系统的session共享;

Redisson 客户端

使用Java 客户端 连接

public static void main(String[] args) {
        Config config = new Config();
        config.setCodec(new org.redisson.client.codec.StringCodec());
        config.useSingleServer()
                .setAddress("http://127.0.0.1:6379");

        RedissonClient redisson = Redisson.create(config);

        RBucket<String> keyObject = redisson.getBucket("k2");

        keyObject.set("v2");

        System.out.println(keyObject.get());

        redisson.shutdown();
    }

redis 常用命令

  • 查看所有key
keys *

安全

查看是否设置密码

我们可以通过以下命令查看是否设置了密码验证:

127.0.0.1:6379> CONFIG get requirepass
1) "requirepass"
2) ""

默认情况下 requirepass 参数是空的,这就意味着你无需通过密码验证就可以连接到 redis 服务。

设置密码

127.0.0.1:6379> CONFIG set requirepass "你的密码"
OK

密码登录

127.0.0.1:6379> AUTH password
OK
127.0.0.1:6379> CONFIG get requirepass

Redis设置密码重启后失效

1.只是单纯的通过命令行设置了密码,这种设置方式是临时的,当服务器重启后,密码会失效。

config set requirepass yourPassword

解决方案:在redis的配置文件中直接配置密码

配置文件中有一行是这样的

# requirepass foobared  

去掉注释,并且把foobared改为自己的密码
如:requirepass 123

2.如果你已经按照上面的方法在配置文件中设置了密码,但启动后仍旧无效,说明你肯定没有指定配置文件运行。服务端也会报出如下警告:

Warning: no config file specified, using the default config.

windows下正确的启动方式:redis-server.exe redis.windows.conf
在指定了配置文件后,再启动就可以读取到设置的密码了。

命令重命名

配置文件中 找到 SECURITY 区域

  • 禁用命令
rename-command KEYS     ""
rename-command FLUSHALL ""
rename-command FLUSHDB  ""
rename-command CONFIG   ""
  • 重命名命令
rename-command KEYS     "XXXXX"
rename-command FLUSHALL "XXXXX"
rename-command FLUSHDB  "XXXXX"
rename-command CONFIG   "XXXXX"

主从同步

https://www.imooc.com/article/19536?block_id=tuijian_wz

redis日志配置

配置文件 redis.conf

logfile "/usr/redis/log/redis.log"
  • 在redis目录下新建一个log文件夹再建一个redis.log文件
  • 重启项目发现启动日志已经从控制台转到日志文件中了。
  • redis日志分为4个级别

Redis4默认的设置为notice,开发测试阶段可以用debug(日志内容较多一般不建议使用),生产模式一般选用notice

  1. debug:会打印出很多信息,适用于开发和测试阶段

  2. verbose(冗长的):包含很多不太有用的信息,但比debug要清爽一些

  3. notice:适用于生产模式

  4. warning : 警告信息

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
回答: Redis数据库是一个内存数据库,通过key-value键值对的方式进行数据存储。它的优点包括访问速度快、适用于缓存系统和存储大量活跃数据,可以提高网站的响应速度。\[1\]在Java中,有两个比较出名的连接Redis的驱动包,分别是Jedis和Redisson,我们可以使用Jedis来进行程序操作Redis。\[3\]以下是一些基本Redis操作方法: - 使用`new Jedis(host, port)`创建Jedis对象,其中host是Redis服务器地址,port是Redis服务端口。 - 使用`set(key, value)`方法设置字符串类型的数据。 - 使用`get(key)`方法获取字符串类型的数据。 - 使用`hset(key, field, value)`方法设置哈希类型的数据。 - 使用`hget(key, field)`方法获取哈希类型的数据。 - 使用`lpush(key, values)`方法设置列表类型的数据。 - 使用`lpop(key)`方法从列表左侧弹出元素。 - 使用`rpop(key)`方法从列表右侧弹出元素。 - 使用`del(key)`方法删除指定的key。\[3\] #### 引用[.reference_title] - *1* [redis基本操作](https://blog.csdn.net/m0_50782114/article/details/128119748)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Redis基本使用!](https://blog.csdn.net/weixin_50769390/article/details/127134134)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值