标签归档:Redis

Redis中的Lua脚本

使用Lua脚本的好处:

  • 减少网络开销。可以将多个请求通过脚本的形式一次发送,减少网络时延
  • 原子操作。redis会将整个脚本作为一个整体执行,中间不会被其他命令插入。因此在编写脚本的过程中无需担心会出现竞态条件,无需使用事务。
  • 复用。客户端发送的脚步会永久存在redis中,这样,其他客户端可以复用这一脚本而不需要使用代码完成相同的逻辑。

调用Lua脚本的语法:

继续阅读

Redis的info命令详解

# Server
redis_version:3.2.3  //Redis的版本号
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:a63c5ae1f392752f
redis_mode:standalone
os:Linux 2.6.32-504.el6.x86_64 x86_64 //Linux版本

继续阅读

Redis中的有序集合对象(Zset)

一、有序集合对象(Zset)对应的底层数据的编码类型

  • OBJ_ENCODING_ZIPLIST:使用压缩列表实现的有序集合对象。
  • OBJ_ENCODING_SKIPLIST:使用跳跃表和字典实现的有序集合对象。

继续阅读

Redis中的集合对象(Set)

一、集合对象(Set)对应的底层数据的编码类型

  • OBJ_ENCODING_INTSET:使用整数集合实现的集合对象
  • OBJ_ENCODING_HT:使用字典实现的集合对象

继续阅读

Redis中的字符串对象(String)

一、字符串对象(String)对应的底层数据的编码类型

  • OBJ_ENCODING_IN:使用整数值实现的字符串对象
  • OBJ_ENCODING_EMBSTR:使用 embstr 编码的简单动态字符串实现的字符串对象
  • OBJ_ENCODING_RAW:使用简单动态字符串实现的字符串对象

继续阅读

Redis中的对象类型与底层编码

Redis 使用对象来表示数据库中的键和值, 每次当我们在 Redis 的数据库中新创建一个键值对时, 我们至少会创建两个对象, 一个对象用作键值对的键(键对象), 另一个对象用作键值对的值(值对象)。

继续阅读

谈谈Redis的SETNX

在 Redis 里,所谓 SETNX,是「SET if Not eXists」的缩写,也就是只有不存在的时候才设置,可以利用它来实现锁的效果,不过很多人没有意识到 SETNX 有陷阱!

比如说:某个查询数据库的接口,因为调用量比较大,所以加了缓存,并设定缓存过期后刷新,问题是当并发量比较大的时候,如果没有锁机制,那么缓存过期的瞬间,大量并发请求会穿透缓存直接查询数据库,造成雪崩效应,如果有锁机制,那么就可以控制只有一个请求去更新缓存,其它的请求视情况要么等待,要么使用过期的缓存。

继续阅读

Redis集群技术及Codis实践

互联网早在几年前就已进入Web 2.0时代,对后台支撑能力的要求,提高了几十倍甚至几百倍。在这个演化过程中,缓存系统扮演了举足轻重的角色。运维进化到今天,已经不是重复造轮子的时代。所以,我们在架构优化和自动化运维中,可以尽可能地选用优秀的开源产品,而不是自己完全从头再来(各种技术geek除外)。

继续阅读

Codis集群部署实战

一、概要

1、折腾codis集群已经快两个月了,感谢一直以来codis的作者刘奇和黄东旭的耐心支持,在这里给你们点个赞,现在我司已经有一个业务跑在了codis集群上,目前只是切了整个业务的10%的量,预计下周会全量切到codis上,这个时候大家肯定特别想知道codis稳定吗?有没有什么bug啊,你想知道的也是我想知道的,搞起吧,用了才知道,反正目前我们这没发现啥问题,一些小的问题已经及时联系作者改掉了,好吧,不扯淡了,写这篇文章的目的是帮助想了解codis的初学者快速部署(官方的部署文档对应运维知识弱一点的童鞋看来还是有点费力)还有就是给自己做一个备录以便后期集群的部署。

继续阅读

Redis中sentinel配置

# Example sentinel.conf

# port <sentinel-port>
# The port that this sentinel instance will run on

port 26379
#指定sentinel使用的端口,不能与redis-server运行实例的端口冲突

继续阅读

redis配置详解

# Redis configuration file example.
#
# Note that in order to read the configuration file, Redis must be
# started with the file path as first argument:
#
# ./redis-server /path/to/redis.conf  //启动redis服务

# Note on units: when memory size is needed, it is possible to specify
# it in the usual form of 1k 5GB 4M and so forth:

#当你需要为某个配置项指定内存大小的时候,必须要带上单位1k后者1kb,且大小写通用

继续阅读