.Net 如何应用 Redis(一)

12 篇文章 0 订阅

※简介
Redis是开源免费的、基于内存的、高性能的 Key-Value 数据库;支持存储的 value 类型 string、 list、hash、 set、zset、 streams(最新版特性)。Redis与 memcached 一样,为了保证效率,数据都是缓存在内存中。区别的是 Redis 会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

※应用方案
Redis+mysql读写方案:在web服务端开发的过程中,redis+mysql是最常用的存储解决方案,mysql存储着所有的业务数据,根据业务规模会采用相应的分库分表、读写分离、主备容灾、数据库集群等手段。但是由于mysql是基于磁盘的IO,基于服务响应性能考虑,将业务热数据利用redis缓存,使得高频业务数据可以直接从内存读取,提高系统整体响应速度。
利用redis+mysql进行数据的CRUD时需要考虑的核心问题是数据的一致性。下面对读写场景的技术方案做个简单说明
这里采用了mysql数据更新成功后,直接删除redis中对应项的方式。目的是在保证一致性的过程中以mysql中数据为准,redis中的数据始终保持和mysql的同步。
有的方案在这里采用的是更新完mysql成功后,然后进行相应的更新redis中数据的操作。这里的问题是,要考虑到更新的操作可能是并发的,而写mysql和写redis是两个步骤,不是原子性的。例如有线程1和线程2同时进行写操作,执行顺序可能是如下的情况:
线程1写mysql->线程2写mysql->线程2写redis->线程1写redis
这样的话,结果变成了mysql的内容是线程2写入的,而redis的内容是线程1写入的,mysql和redis中的数据就不一致了,后续的数据读取都是错的。
而采用每次写完mysql后就清除redis的方式,就保证了写完后的读取必然会重新从mysql读取数据,然后写入redis。这样就保证了redis里的数据最终和mysql中是一致的,保证了数据的最终一致性。

※安装

下载地址:https://redis.io/download。本文用的是6.0版本【redis-6.0.6.tar.gz】
Linux:
具体步骤主要为上传文件、解压、编译
BigData是自己建的目录,先假设文件已上传至该目录
[root@node129 BigData]# tar xzf redis-6.0.6.tar.gz
[root@node129 BigData]# cd redis-6.0.6
[root@node129 redis-6.0.6]# make
[root@node129 redis-6.0.6]# cd src
[root@node129 src]# make install
[root@node129 src]# cd …
[root@node129 redis-6.0.6]# mkdir etc
[root@node129 redis-6.0.6]# mkdir bin
[root@node129 redis-6.0.6]# pwd
/BigData/redis-6.0.6
[root@node129 redis-6.0.6]# mv redis.conf /BigData/redis-6.0.6/etc
[root@node129 redis-6.0.6]# cd src
[root@node129 src]# mv mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-server /BigData/redis-6.0.6/bin
[root@node129 src]# cd …
[root@node129 redis-6.0.6]# cd bin
[root@node129 bin]# ./redis-server
结论 到这里就可以在前台启动redis服务了。不过仅仅是前台启动,接下来设置后台启动
[root@node129 etc]# vim redis.conf 修改redis配置文件
注:将daemonize属性改为yes(表明需要在后台运行)
启动验证:
[root@node129 bin]# ./redis-server /BigData/redis-6.0.6/etc/redis.conf 后台启动redis
12887:C 10 Aug 2020 07:18:12.716 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
12887:C 10 Aug 2020 07:18:12.716 # Redis version=6.0.6, bits=64, commit=00000000, modified=0, pid=12887, just started
12887:C 10 Aug 2020 07:18:12.716 # Configuration loaded
[root@node129 bin]# ./redis-cli 链接客户端
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> exit 退出redis-cli客户端
[root@node129 bin]# netstat -tunpl|grep 6379 查看进程
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 12888/./redis-serve
结论 到这里就可以后台启动redis服务了。
[root@node129 ~]# pkill -9 redis-server 删除redis服务
[root@node129 ~]# /BigData/redis-6.0.6/bin/redis-server /BigData/redis-6.0.6/etc/redis.conf 重启redis服务
14017:C 10 Aug 2020 08:08:47.578 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
14017:C 10 Aug 2020 08:08:47.578 # Redis version=6.0.6, bits=64, commit=00000000, modified=0, pid=14017, just started
14017:C 10 Aug 2020 08:08:47.578 # Configuration loaded
[root@node129 ~]# ps axu | grep redis-server 检查redis服务是否存在
root 14018 0.2 0.7 162204 7888 Ssl 08:08 0:00 /BigData/redis-6.0.6/bin/redis-server 127.0.0.1:6379
root 14032 0.0 0.0 112648 956 pts/1 S+ 08:09 0:00 grep --color=auto redis-server

[root@node129 ~]# service redis stop 关闭redis服务
[root@node129 ~]# service redis start 启动redis服务

补充说明 :
daemonize yes 可以从后台启动
port 6379 修改成当前的端口号
cluster-enabled yes 支持集群
cluster-config-file nodes.conf 节点配置文件名称
cluster-node-timeout 15000 集群节点超时时间
appendonly yes 日志追加模式
protected-mode 改为no 以及注释bind 127.0.0.1或者将bind修改成0.0.0.0 支持远程访问
requirepass 数据库登录密码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值