redis入门

redis ginotang 583℃ 0评论

在CentOS7中安装redis

centos7中的epel源中有redis的安装包,如果系统中还没有安装epel源,先通过下面的命令安装

安装好后就可以查询是否有redis包

安装运行redis

确认系统有redis安装包,只需要简单使用yum安装即可

通过yum安装的redis支持systemd的启动方式,因此可以使用systemctl启动redis服务。

redis的默认启动文件是/etc/redis.conf

redis安装包包含4个可执行程序,分别是

  • redis-server redis服务器端,可用于启动redis服务
  • redis-cli redis客户端,用于连接redis服务,并执行命令
  • redis-benchmark 性能测试工具
  • redis-check-aof aof文件检查工具
  • redis-check-rdb rdb文件检查工具

除了使用systemd启动redis外,还可以使用redis-server命名

连接redis

使用redis-cli连接redis服务

如果所有参数都是默认的,可以直接运行redis-cli

redis默认开启16个数据库,从0~15,可以在配置文件中修改。默认数据库是0号数据库。

获取数据库信息

使用redis-cli命令连接到redis后,可以使用info命令查看redis数据库的相关信息。

命令运行后会列出所有section的信息,也可以单独检查每个section的信息,例如

info命令列出的内容太多,不便于查看,可以通过管道和其他命令一起使用

redis的数据类型和常用操作

redis是以键值对形式保存数据的,因此,所有数据都是通过key来获取和设置。

字符串

redis中所有非复杂类型的数据都是字符串,即使复杂数据类型最终保存的都是字符串数据。

set和get命令

set命令语法: set key value

get命令语法: get key

set命令用来添加一个键值,get命令则用于获取值。例如

redis中没有数字类型,可以使用type命令检查一个值的类型

incr和decr

虽然redis没有数字类型,但是我们依然可以像数字一样操作数字字符串。例如自增(incr)和自减(decr)操作。

incrby(incrbyfloat)和decrby

incr和decr的步进(递增/减值)永远都是1,incrby和decrby则可以设置一个不同的步进。

incrbyfloat用于操作浮点数

由于redis中没有decrbyfloat方法,因此减去一个浮点数必须通过加一个负浮点数的方式。

strlen和getrange

strlen用于获取值的长度,getrange则用于获取字符串的一个子串。

append

append命令用于追加一个字符串到一个key的结尾

expire、persist和ttl

expire和persist是一对相反的命令,expire用于设置一个key的过期时间,而persist则设置一个key永不过期。

ttl用于查询key目前的生存期,如果key是一个永不过期的key,那么ttl返回-1。

列表

列表是一个双向的栈结构,添加数据就是压栈(push),获取数据就是出栈(pop)。

lpush和rpush

创建一个名为season的列表,并添加4个元素,我们使用的是lpush(left push),也就是说从spring开始入栈,栈结构的特征是后进先出,因此,栈顶(第一个元素)是winter,它是最后一个被压入栈的元素。

再来看一下rpush

从结果可以看出,数据从winter开始入栈(从右往左),因此sping是最后一个被压栈的元素,所以它处于栈顶。

lpop和rpop

lpop和rpop是和push相反的命令,用于把元素弹出列表。

lset

设置指定索引的元素的值,索引从0开始

lrem

移除列表中指定数量的元素

linsert

在指定位置插入元素

集合

集合中的元素必须是唯一的,即元素不能重复,插入的重复元素会被自动移除。

默认的集合是无序的。

sadd

往集合添加元素的时候我们故意有重复元素,但是只有4个元素被成功添加进去,重复的被去掉了。

scard

计算集合中元素的数量

smembers

用于查看集合中的元素。

sismember

判断元素是否是集合中的一部分

sunion和sinter

分别用于计算集合的并集和交集

计算并集

计算交集

sdiff

计算差集

有序集合

有序集合中元素的保存顺序按照添加时给定的权重排序。

zadd

添加元素

权重越少排名越前。

zrem

移除有序集合中的元素

zscore

获取指定元素的权重

zrange和zrevrange

获取集合中的元素,前者先输出权重低的,后者先输出权重高的。

zintersotre和zunionstore

取交集和并集,并把结果保存到一个新的集合中去

取并集

取交集

散列

散列数据类型中允许一个key对应多个字段。

hmset和hmget

hmset设置key中多个字段的值,hmget获取多个字段的值

hkeys

获取hash中所有的key

hexists

hash中是否存在指定字段

hdel

删除hash中指定字段

hlen

hash中有多少个字段

消息发布和订阅

publish和subscribe用于消息发布和订阅

subscribe

订阅指定的频道,subscribe可先于publish运行

命令运行后处于阻塞状态,等待news频道发布消息。

publish

publish用于发布消息到指定频道下。现在通过另一个终端发布一个消息

这个时候,订阅者就接收到消息发布者的消息

事务

redis支持事务,但和传统的关系型数据库不同,redis的事务锁采用的是乐观锁:即事务运行的时候不预先锁定对象,而是观察对象是否已经改变,如果对象已经改变,则事务不执行。

multi和exec

开始一个事务,执行的事务会先放到队列里面,直到exec命令执行后才运行队列中的事务。使用经典的银行账号为例子

获取执行事务后各自的银行余额

watch

另一个经典问题是买票,多个人抢票。

redis-watch

redis-watch

  1. 假设当前只有一张车票
  2. 使用watch观察车票是否有变动
  3. 开始事务
  4. 车票已经变化(即使ticket的值不设置为0)
  5. 把事务放进队列
  6. 执行事务(发现事务已经无法执行,原因是我们监视的值已经变化)

watch的作用是:当监视的值发生变化,就会通知事务,最终结果是事务执行失败,确保事务的安全性和一致性。

转载请注明:Pure nonsense » redis入门

喜欢 (0)
0 0 投票数
文章评分
订阅评论
提醒
guest
0 评论
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x
()
x