个人观点:etcd的红火来源于kurbernetes用etcd做服务发现,而redis的兴起则来源于memcache缓存本身的局限性。 etcd是一种分布式存储,更强调的是各个节点之间的通信,同步,确保各个节点上数据和事务的一致性, 使得服务发现工作更稳定,本身单节点的写入能力并不强。 redis更像是内存型缓存,虽然也有cluster做主从同步和读写分离, 但节点间的一致性主要强调的是数据,并不在乎事务,因此读写能力很强,qps甚至可以达到10万+ 两者都是k-v存储,但redis支持更多的存储模式,包括KEY,STRING,HMAP,SET,SORTEDSET等等, 因此redis本身就可以完成一些比如排序的简单逻辑。而etcd则支持对key的版本记录和txn操作和client对key的watch,因此适合用做服务发现。 日常使用中,etcd主要还是做一些事务管理类的,基础架构服务用的比较多,容器类的服务部署是其主流。 而redis广泛地使用在缓存服务器方面,用作mysql的缓存,通常依据请求量,甚至会做成多级缓存,当然部分情况下也用做存储型redis做持续化存储。 from:https://www.cnblogs.com/nmap/p/9398346.html
View Details<add name="Abp.Redis.Cache" connectionString="127.0.0.1:6379,password=123456"/> 参考:https://github.com/StackExchange/StackExchange.Redis/blob/master/Docs/Configuration.md from:https://www.cnblogs.com/lishidefengchen/p/10656327.html
View Details序言 这篇文章没有什么知识点,只是为了新伙伴少踩点坑 1. 问题重现 创建容器 2. 解读参数 -d: 后台运行容器,并返回容器ID; -i: 以交互模式运行容器,通常与 -t 同时使用; -p: 端口映射,格式为:主机(宿主)端口:容器端口 -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用; --ip: 为容器制定一个固定的ip --net: 指定网络模式 3. 进入容器查看redis.conf文件 发现是并没有redis.conf文件的,那么这个时候就是新手踩坑阶段了,因为没有系统的学习docker所以会花费很多时间 2. 解决问题 没有配置文件这件事呢!那是因为redis容器里边的配置文件是需要在创建容器时映射进来的 那么就需要删除我们之前创建好的容器,在删除前需要先停止容器后才可以删除 停止容器:docker container stop redis-test 删除容器:docker container rm redis-test 1. 开始重新创建redis容器 docker run -itd --name redis-slave -v /usr/local/redis/redis.conf:/etc/redis.conf -v /root/usr/local/redis/data:/data --net mynetwork -p 6381:6379 --ip 172.10.0.3 redis 参数解释: -v /usr/local/redis/redis.conf:/etc/redis.conf:映射配置文件 -v /root/usr/local/redis/data:/data:映射数据目录 那么这个时候就有redis配置文件了 搭建同意的挂载外部配置 上边是在我宿主机有redis的情况下的,那么下来说宿主机没有redis的情况 这里说的映射其实就是挂载外部配置和数据安装 1. 创建docker统一的外部配置文件 mkdir -p docker/redis/{conf,data} 2. 在conf目录创建redis.conf的配置文件 touch /docker/redis/conf/redis.conf 3. redis.conf文件的内容需要自行去下载,网上很多 4. 创建启动容器,加载配置文件并持久化数据 docker run -d --privileged=true -p 6379:6379 -v /docker/redis/conf/redis.conf:/etc/redis/redis.conf -v /docker/redis/data:/data --name redis-test redis redis-server […]
View Details1.搜索镜像
1 |
docker search redis |
2.拉取镜像
1 |
docker pull redis |
3.创建Redis容器并设置密码
1 2 |
docker run --name redis -d --restart=always --privileged=true -p 6379:6379 redis --requirepass 123456 #前边是宿主机端口 后面是docker使用的端口 |
4.备注 为现有的redis创建密码或修改密码的方法: 1.进入redis的容器 docker exec -it 容器ID bash 2.进入redis目录 /usr/local/bin 3.运行命令:redis-cli 4.查看现有的redis密码:config get requirepass 5.设置redis密码config set requirepass ****(****为你要设置的密码) 6.若出现(error) NOAUTH Authentication required.错误,则使用 auth 密码 来认证密码 from:https://www.cnblogs.com/zhangzimo/p/12753563.html
View Details开发环境最近遇到了"MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk"的问题,服务出现了问题,一看日志是Redis在报这个错误。 查了查网上的资料,解决方案基本都是修改Redis的配置文件,将 stop-writes-on-bgsave-error yes修改为 stop-writes-on-bgsave-error no 这是一个暂时性的解决方法。看了看stackoverflow上的回答,最高赞回答是这样的,如下图: 大概意思是:这是一个快速应急方法,如果你担心你的数据,那就首先检查下bgsave方法为什么会失败。bgsave方法是干什么的呢?咱来看下面这张图: bgsave方法为什么会失败呢?咱们看看大佬的回答 大概意思是(翻译不到位的地方,还请见谅,英文比较菜):在BGSAVE时,Redis会fork一个子进程,把数据保存到硬盘上。你可以通过查看日志来获取BGSAVE失败的原因(Linux系统里Redis日志文件通常是在/var/log/redis/redis-server.log),大多数时候BGSAVE失败的原因是fork进程分配不到内存。更多时候,fork进程分配不到内存是因为跟操作系统的优化相冲突,即使操作系统有足够的内存。(下面一大段就不翻译了,意思是可以Redis官网找到相应的解释,文末会把相关文章链接都缀上)。当然大神也给出了解决方案 Linux系统中,修改/etc/sysctl.conf文件,添加配置: vm.overcommit_memory=1 执行命令,使其生效 sudo sysctl -p /etc/sysctl.conf 参考文章链接: stackoverflow的回答链接 BGSAVE命令解释 redis官网的faq from:https://blog.csdn.net/u014071875/article/details/103715183
View Details今天重启游戏服务器在连接redis数据库时突然报错:MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error. 究其原因是因为强制把redis快照关闭了导致不能持久化的问题,在网上查了一些相关解决方案,通过stop-writes-on-bgsave-error值设置为no即可避免这种问题。 有两种修改方法,一种是通过redis命令行修改,另一种是直接修改redis.conf配置文件 命令行修改方式示例: 127.0.0.1:6379> config set stop-writes-on-bgsave-error no 修改redis.conf文件:vi打开redis-server配置的redis.conf文件,然后使用快捷匹配模式:/stop-writes-on-bgsave-error定位到stop-writes-on-bgsave-error字符串所在位置,接着把后面的yes设置为no即可。 from:https://blog.csdn.net/qq_31766907/article/details/78715935
View DetailsRedis服务器设置密码后,使用service redis stop 会出现以下信息: service redis stop Stopping … OK (error) NOAUTH Authentication required. Waiting for Redis to shutdown … Waiting for Redis to shutdown … Waiting for Redis to shutdown … Waiting for Redis to shutdown … Waiting for Redis to shutdown … Waiting for Redis to shutdown … Waiting for Redis to shutdown … Waiting for Redis to shutdown … 出现这样的错误信息,redis 这时是没有停止服务的。可以使用ps -ef | grep redis 查进程号 然后kill 掉,如果在deamon下还需要去删除pid文件,有点繁琐。 解决办法: 用redis-cli 密码登陆(redis-cli -a password)就OK了。 再用ps -ef | grep redis 可以看到redis进程已经正常退出。 修改redis服务脚本,加入如下所示的红色授权信息即可: vi /etc/init.d/redis $CLIEXEC -a "password" -p $REDISPORT shutdown from:https://www.cnblogs.com/jeffen/p/6068745.html
View Details一、安装redis 第一步:下载redis安装包 wget http://download.redis.io/releases/redis-4.0.6.tar.gz
1 2 3 4 5 6 7 8 9 10 11 |
[root@iZwz991stxdwj560bfmadtZ local]# wget http://download.redis.io/releases/redis-4.0.6.tar.gz --2017-12-13 12:35:12-- http://download.redis.io/releases/redis-4.0.6.tar.gz Resolving download.redis.io (download.redis.io)... 109.74.203.151 Connecting to download.redis.io (download.redis.io)|109.74.203.151|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 1723533 (1.6M) [application/x-gzip] Saving to: ‘redis-4.0.6.tar.gz’ 100%[==========================================================================================================>] 1,723,533 608KB/s in 2.8s 2017-12-13 12:35:15 (608 KB/s) - ‘redis-4.0.6.tar.gz’ saved [1723533/1723533] |
第二步:解压压缩包 tar -zxvf redis-4.0.6.tar.gz
1 |
[root@iZwz991stxdwj560bfmadtZ local]# tar -zxvf redis-4.0.6.tar.gz |
第三步:yum安装gcc依赖 yum install gcc
1 |
[root@iZwz991stxdwj560bfmadtZ local]# yum install gcc |
遇到选择,输入y即可 第四步:跳转到redis解压目录下 cd redis-4.0.6
1 |
[root@iZwz991stxdwj560bfmadtZ local]# cd redis-4.0.6 |
第五步:编译安装 make MALLOC=libc
1 |
[root@iZwz991stxdwj560bfmadtZ redis-4.0.6]# make MALLOC=libc |
将/usr/local/redis-4.0.6/src目录下的文件加到/usr/local/bin目录 cd src && make install
1 2 3 4 5 6 7 8 9 10 |
[root@iZwz991stxdwj560bfmadtZ redis-4.0.6]# cd src && make install CC Makefile.dep Hint: It's a good idea to run 'make test' ;) INSTALL install INSTALL install INSTALL install INSTALL install INSTALL install |
二、启动redis的三种方式 先切换到redis src目录下
1 |
[root@iZwz991stxdwj560bfmadtZ redis-4.0.6]# cd src |
1、直接启动redis ./redis-server
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
[root@iZwz991stxdwj560bfmadtZ src]# ./redis-server 18685:C 13 Dec 12:56:12.507 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 18685:C 13 Dec 12:56:12.507 # Redis version=4.0.6, bits=64, commit=00000000, modified=0, pid=18685, just started 18685:C 13 Dec 12:56:12.507 # Warning: no config file specified, using the default config. In order to specify a config file use ./redis-server /path/to/redis.conf _._ _.-``__ ''-._ _.-`` `. `_. ''-._ Redis 4.0.6 (00000000/0) 64 bit .-`` .-```. ```\/ _.,_ ''-._ ( ' , .-` | `, ) Running in standalone mode |`-._`-...-` __...-.``-._|'` _.-'| Port: 6379 | `-._ `._ / _.-' | PID: 18685 `-._ `-._ `-./ _.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | http://redis.io `-._ `-._`-.__.-'_.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | `-._ `-._`-.__.-'_.-' _.-' `-._ `-.__.-' _.-' `-._ _.-' `-.__.-' 18685:M 13 Dec 12:56:12.508 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. 18685:M 13 Dec 12:56:12.508 # Server initialized 18685:M 13 Dec 12:56:12.508 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect. 18685:M 13 Dec 12:56:12.508 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled. 18685:M 13 Dec 12:56:12.508 * Ready to accept connections |
如上图:redis启动成功,但是这种启动方式需要一直打开窗口,不能进行其他操作,不太方便。 按 ctrl + c可以关闭窗口。 2、以后台进程方式启动redis 第一步:修改redis.conf文件 将
1 |
daemonize no |
修改为
1 |
daemonize yes |
第二步:指定redis.conf文件启动 1 ./redis-server /usr/local/redis-4.0.6/redis.conf
1 2 3 4 |
[root@iZwz991stxdwj560bfmadtZ src]# ./redis-server /usr/local/redis-4.0.6/redis.conf 18713:C 13 Dec 13:07:41.109 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 18713:C 13 Dec 13:07:41.109 # Redis version=4.0.6, bits=64, commit=00000000, modified=0, pid=18713, just started 18713:C 13 Dec 13:07:41.109 # Configuration loaded |
第三步:关闭redis进程 首先使用ps -aux | grep redis查看redis进程
1 2 3 |
[root@iZwz991stxdwj560bfmadtZ src]# ps -aux | grep redis root 18714 0.0 0.1 141752 2008 ? Ssl 13:07 0:00 ./redis-server 127.0.0.1:6379 root 18719 0.0 0.0 112644 968 pts/0 R+ 13:09 0:00 grep --color=auto redis |
使用kill命令杀死进程
1 |
[root@iZwz991stxdwj560bfmadtZ src]# kill -9 18714 |
3、设置redis开机自启动 1、在/etc目录下新建redis目录 mkdir redis
1 |
[root@iZwz991stxdwj560bfmadtZ etc]# mkdir redis |
2、将/usr/local/redis-4.0.6/redis.conf 文件复制一份到/etc/redis目录下,并命名为6379.conf
1 |
[root@iZwz991stxdwj560bfmadtZ redis]# cp /usr/local/redis-4.0.6/redis.conf /etc/redis/6379.conf |
[…]
View DetailsRedis 中有 5 种数据结构,分别是字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set),因为使用 Redis 场景的开发中肯定是无法避开这些基础结构的,所以熟练掌握它们也就成了一项必不可少的能力。本文章精要地介绍了 Redis 的这几种数据结构,主要覆盖了它们各自的定义、基本用法与相关要点。 字符串类型 字符串是 Redis 中的最基础的数据结构,我们保存到 Redis 中的 key,也就是键,就是字符串结构的。除此之外,Redis 中其它数据结构也是在字符串的基础上设计的,可见字符串结构对于 Redis 是多么重要。 Redis 中的字符串结构可以保存多种数据类型,如:简单的字符串、JSON、XML、二进制等,但有一点要特别注意:在 Redis 中字符串类型的值最大只能保存 512 MB。 命令 下面通过命令了解一下对字符串类型的操作: 1.设置值
1 |
set key value [EX seconds] [PX milliseconds] [NX|XX] |
set 命令有几个非必须的选项,下面我们看一下它们的具体说明: EX seconds:为键设置秒级过期时间 PX milliseconds:为键设置毫秒级过期时间 NX:键必须不存在,才可以设置成功,用于添加 XX:键必须存在,才可以设置成功,用于更新 set 命令带上可选参数 NX 和 XX 在实际开发中的作用与 setnx 和 setxx 命令相同。我们知道 setnx 命令只有当 key 不存在的时候才能设置成功,换句话说,也就是同一个 key 在执行 setnx 命令时,只能成功一次,并且由于 Redis 的单线程命令处理机制,即使多个客户端同时执行 setnx 命令,也只有一个客户端执行成功。所以,基于 setnx 这种特性,setnx 命令可以作为分布式锁的一种解决方案。 而 setxx 命令则可以在安全性比较高的场景中使用,因为 set 命令执行时,会执行覆盖的操作,而 setxx 在更新 key 时可以确保该 key 已经存在了,所以为了保证 key 中数据类型的正确性,可以使用 setxx 命令。 2.获取值
1 |
get key |
3.批量设置值
1 |
mset key value |
4.批量获取值
1 |
mget key |
如果有些键不存在,那么它的值将为 nil,也就是空,并且返回结果的顺序与传入时相同。 5.计数
1 |
incr key |
incr 命令用于对值做自增操作,返回的结果分为 […]
View Details