1.yum 安装
- # 前提得配置好阿里云 yum 源, epel 源
- # 查看是否有 Redis 包
- yum list Redis
- # 安装 Redis
- yum install Redis -y
- # 安装好, 启动 Redis
- systemctl start Redis
2. 检测 Redis 是否工作
- Redis-cli #Redis 客户端工具
- # 进入交互式环境后, 执行 ping, 返回 pong 表示安装成功
- 127.0.0.1:6379> ping
- PONG
源码安装 Redis, 编译安装
大家用过 yum, 是相当省事好用吧, 为什么还要学习源码安装?
有人说编译安装性能好? 错
编译安装的优势是:
编译安装时可以指定扩展的 module(模块),PHP,apache,nginx 都是一样有很多第三方扩展模块, 如 MySQL, 编译安装时候, 如果需要就定制存储引擎(innodb, 还是 MyIASM)
编译安装可以统一安装路径, Linux 软件约定安装目录在 / opt / 下面
软件仓库版本一般比较低, 编译源码安装可以根据需求, 安装最新的版本
1. 下载 Redis 源码
wget http://download.redis.io/releases/redis-4.0.10.tar.gz
2. 解压缩
tar -zxf Redis-4.0.10.tar.gz
3. 切换 Redis 源码目录
cd Redis-4.0.10.tar.gz
4. 编译源文件
make
5. 编译好后, src / 目录下有编译好的 Redis 指令
6.make install 安装到指定目录, 默认在 / usr/local/bin
Redis 可执行文件
- ./Redis-benchmark // 用于进行 Redis 性能测试的工具
- ./Redis-check-dump // 用于修复出问题的 dump.rdb 文件
- ./Redis-cli //Redis 的客户端
- ./Redis-server //Redis 的服务端
- ./Redis-check-aof // 用于修复出问题的 AOF 文件
- ./Redis-sentinel // 用于集群管理
Redis 配置文件
Redis 配置文件名为
Redis.conf
这个文件可以自定义
Redis.conf 核心配置项
绑定 ip, 如需要远程访问, 需要填写服务器 ip
bind 127.0.0.1
端口, Redis 启动端口
port
守护进程方式运行
daemonize yes
rdb 数据文件
dbfilename dump.rdb
数据文件存放路径
dir /var/lib/Redis/
日志文件
logfile /var/log/Redis/Redis-server.log
主从复制
slaveof
启动 Redis 服务端
启动 Redis 非常简单, 直接./Redis-server 就可以启动服务端了, 还可以用下面的方法指定要加载的配置文件:
./Redis-server ../Redis.conf
默认情况下, Redis-server 会以非 daemon 的方式来运行, 且默认服务端口为 6379.
使用 Redis 客户端
- # 执行客户端命令即可进入
- ./Redis-cli
- # 测试是否连接上 Redis
- 127.0.0.1:6379> ping
返回 pong 代表连接上了
- // 用 set 来设置 key,value
- 127.0.0.1:6379> set name "chaoge"
- OK
- //get 获取 name 的值
- 127.0.0.1:6379> get name
- "chaoge"
Redis 数据结构
Redis 是一种高级的 key:value 存储系统, 其中 value 支持五种数据类型
字符串(strings)
散列(hashes)
列表(lists)
集合(sets)
有序集合(sorted sets)
基本命令
keys * 查看所有 key
type key 查看 key 类型
expire key seconds 过期时间
ttl key 查看 key 过期剩余时间 -2 表示 key 已经不存在了
persist 取消 key 的过期时间 -1 表示 key 存在, 没有过期时间
exists key 判断 key 存在 存在返回 1 否则 0
del keys 删除 key 可以删除多个
dbsize 计算 key 的数量
数据结构示例
1.strings 类型
set 设置 key
get 获取 key
append 追加 string
mset 设置多个键值对
mget 获取多个键值对
del 删除 key
incr 递增 + 1
decr 递减 - 1
- 127.0.0.1:6379> set name 'yu' #设置 key
- OK
- 127.0.0.1:6379> get name #获取 value
- "yu"
- 127.0.0.1:6379> set name 'yuchao' #覆盖 key
- OK
- 127.0.0.1:6379> get name #获取 value
- "yuchao"
- 127.0.0.1:6379> append name 'dsb' #追加 key 的 string
- (integer) 10
- 127.0.0.1:6379> get name #获取 value
- "yuchao dsb"
- 127.0.0.1:6379> mset user1 'alex' user2 'xiaopeiqi' #设置多个键值对
- OK
- 127.0.0.1:6379> get user1 #获取 value
- "alex"
- 127.0.0.1:6379> get user2 #获取 value
- "xiaopeiqi"
- 127.0.0.1:6379> keys * #找到所有 key
- 1) "user2"
- 2) "name"
- 3) "user1"
- 127.0.0.1:6379> mget user1 user2 name #获取多个 value
- 1) "alex"
- 2) "xiaopeiqi"
- 3) "yuchao dsb"
- 127.0.0.1:6379> del name #删除 key
- (integer) 1
- 127.0.0.1:6379> get name #获取不存在的 value, 为 nil
- (nil)
- 127.0.0.1:6379> set num 10 #string 类型实际上不仅仅包括字符串类型, 还包括整型, 浮点型. Redis 可对整个字符串或字符串一部分进行操作, 而对于整型 / 浮点型可进行自增, 自减操作.
- OK
- 127.0.0.1:6379> get num
- "10"
- 127.0.0.1:6379> incr num #给 num string 加一 INCR 命令将字符串值解析成整型, 将其加一, 最后将结果保存为新的字符串值, 可以用作计数器
- (integer) 11
- 127.0.0.1:6379> get num
- "11"
- 127.0.0.1:6379> decr num #递减 1
- (integer) 10
- 127.0.0.1:6379> decr num #递减 1
- (integer) 9
- 127.0.0.1:6379> get num
- "9"
2.list 类型
lpush 从列表左边插
rpush 从列表右边插
lrange 获取一定长度的元素 lrange key start stop
ltrim 截取一定长度列表
lpop 删除最左边一个元素
rpop 删除最右边一个元素
lpushx/rpushx key 存在则添加值, 不存在不处理
- lpush duilie 'alex' 'peiqi' 'ritian' #新建一个 duilie, 从左边放入三个元素
- llen duilie #查看 duilie 长度
- lrange duilie 0 -1 #查看 duilie 所有元素
- rpush duilie 'chaoge' #从右边插入 chaoge
- lpushx duilie2 'dsb' #key 存在则添加 dsb 元素, key 不存在则不作处理
- ltrim duilie 0 2 #截取队列的值, 从索引 0 取到 2, 删除其余的元素
- lpop #删除左边的第一个
- rpop #删除右边的第一个
3.sets 集合类型
Redis 的集合, 是一种无序的集合, 集合中的元素没有先后顺序.
集合相关的操作也很丰富, 如添加新元素, 删除已有元素, 取交集, 取并集, 取差集等. 我们来看例子:
sadd/srem 添加 / 删除 元素
sismember 判断是否为 set 的一个元素
smembers 返回集合所有的成员
sdiff 返回一个集合和其他集合的差异
sinter 返回几个集合的交集
sunion 返回几个集合的并集
- sadd zoo wupeiqi yuanhao #添加集合, 有三个元素, 不加引号就当做字符串处理
- smembers zoo #查看集合 zoo 成员
- srem zoo wupeiqi #删除 zoo 里面的 alex
- sismember zoo wupeiqi #返回改是否是 zoo 的成员信息, 不存在返回 0, 存在返回 1
- sadd zoo wupeiqi #再把 wupeiqi 加入 zoo
- smembers zoo #查看 zoo 成员
- sadd zoo2 wupeiqi mjj #添加新集合 zoo2
- sdiff zoo zoo2 #找出集合 zoo 中有的, 而 zoo2 中没有的元素
- sdiff zoo2 zoo #找出 zoo2 中有, 而 zoo 没有的元素
- sinter zoo zoo1 #找出 zoo 和 zoo1 的交集, 都有的元素
- sunion zoo zoo1 #找出 zoo 和 zoo1 的并集, 所有的不重复的元素
4. 有序集合
都是以 z 开头的命令
zset 的每一个成员都有一个分数与之对应, 并且分数是可以重复的. 有序集合的增删改由于有啦排序, 执行效率就是非常快速的, 即便是访问集合中间的数据也是非常高效的.
用来保存需要排序的数据, 例如排行榜, 成绩, 工资等.
实例
利用有序集合的排序, 排序学生的成绩
- 127.0.0.1:6379> ZADD mid_test 70 "alex"
- (integer) 1
- 127.0.0.1:6379> ZADD mid_test 80 "wusir"
- (integer) 1
- 127.0.0.1:6379> ZADD mid_test 99 "yuyu"
排行榜, zreverange 倒叙 zrange 正序
- 127.0.0.1:6379> ZREVRANGE mid_test 0 -1 withscores
- 1) "yuyu"
- 2) "99"
- 3) "wusir"
- 4) "80"
- 5) "xiaofneg"
- 6) "75"
- 7) "alex"
- 8) "70"
- 127.0.0.1:6379> ZRANGE mid_test 0 -1 withscores
- 1) "alex"
- 2) "70"
- 3) "xiaofneg"
- 4) "75"
- 5) "wusir"
- 6) "80"
- 7) "yuyu"
- 8) "99"
移除有序集合 mid_test 中的成员, xiaofeng 给移除掉
- 127.0.0.1:6379> ZREM mid_test xiaofneg
- (integer) 1
- 127.0.0.1:6379> ZRANGE mid_test 0 -1 withscores
- 1) "alex"
- 2) "70"
- 3) "wusir"
- 4) "80"
- 5) "yuyu"
- 6) "99"
返回有序集合 mid_test 的基数
- 127.0.0.1:6379> ZCARD mid_test
- (integer) 3
返回成员的 score 值
- 127.0.0.1:6379> ZSCORE mid_test alex
- "70"
zrank 返回有序集合中, 成员的排名. 默认按 score, 从小到大排序.
- 127.0.0.1:6379> ZRANGE mid_test 0 -1 withscores
- 1) "alex"
- 2) "70"
- 3) "wusir"
- 4) "80"
- 5) "yuyu"
- 6) "99"
- 127.0.0.1:6379>
- 127.0.0.1:6379>
- 127.0.0.1:6379> ZRANK mid_test wusir
- (integer) 1
- 127.0.0.1:6379> ZRANK mid_test yuyu
- (integer) 2
5. 哈希数据结构
哈希结构就是 k1 -> k1 : v1 如同字典 套字典 { k1 : { k2: v2 } } , 取出 v2 必须 k1, 取出 k2
hashes 即哈希. 哈希是从 Redis-2.0.0 版本之后才有的数据结构.
hashes 存的是字符串和字符串值之间的映射, 比如一个用户要存储其全名, 姓氏, 年龄等等, 就很适合使用哈希.
hset 设置散列值
hget 获取散列值
hmset 设置多对散列值
hmget 获取多对散列值
hsetnx 如果散列已经存在, 则不设置(防止覆盖 key)
hkeys 返回所有 keys
hvals 返回所有 values
hlen 返回散列包含域 (field) 的数量
hdel 删除散列指定的域(field)
hexists 判断是否存在
Redis hash 是一个 string 类型的 field 和 value 的映射表
语法 hset key field value
- hset news1 title "first news title" #设置第一条新闻 news 的 id 为 1, 添加数据 title 的值是 "first news title"
- hset news1 content "news content" #添加一个 conntent 内容
- hget news1 title #获取 news:1 的标题
- hget news1 content #获取 news 的内容
- hmget news1 title content #获取多对 news:1 的 值
- hmset news2 title "second news title" content "second Contents2" #设置第二条新闻 news:2 多个 field
- hmget news2 title content #获取 news:2 的多个值
- hkeys news1 #获取新闻 news:1 的所有 key
- hvals news1 #获取新闻 news:1 的所有值
- hlen news1 #获取新闻 news:1 的长度
- hdel news1 title #删除新闻 news:1 的 title
- hlen news1 #看下新闻 news:1 的长度
- hexists news1 title #判断新闻 1 中是否有 title, 不存在返回 0, 存在返回
来源: http://www.bubuko.com/infodetail-3359284.html