redis简介
redis是一个开源(BSD许可)的使用C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,它可以用作数据库、缓存和消息中间件,并提供多种语言的API。从2010年3月15日起,redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。

redis是一个key-value存储系统。它支持存储的value类型包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

1、安装redis

1.1使用yum进行安装,这里使用的是yum源,关于如何安装yum仓库请参考我的https://www.cnblogs.com/caesar-id/p/10821105.html

查看阿里源的redis版本

[root@localhost ~]# yum list redis

使用yum安装redis,安装过程非常简单

[root@localhost ~]# yum install redis -y

1.2使用源码安装redis

我们使用yum安装的redis版本是3.2.12,但是截至当前redis版本已经是redis-5.0.4。这里我们就使用最新的版本进行源码安装。

如果你已经使用yum进行了安装,现在想使用最新版本的redis,你最好卸载当前的redis。以免造成不必要的麻烦。

[root@localhost ~]# yum remove redis -y  // 卸载yum安装的redis

1.2.1下载redis源码包

[root@localhost ~]# wget -P /opt/source/ http://download.redis.io/releases/redis-5.0.4.tar.gz

1.2.2解包

[root@localhost ~]# tar -zxvf /opt/source/redis-5.0..tar.gz -C /opt/

1.2.3安装

[root@localhost ~]# cd /opt/redis-5.0./
[root@localhost redis-5.0.]# make && make install //默认在/usr/local/bin所以就不用我们设置环境变量了

安装后查看redis都有哪些可执行文件

[root@localhost ~]# ls /usr/local/bin/redis-*
/usr/local/bin/redis-benchmark // 用于进行redis性能测试的工具
/usr/local/bin/redis-cli // redis的客户端
/usr/local/bin/redis-check-aof // 用于修复出问题的AOF文件
/usr/local/bin/redis-sentinel // 用于集群管理
/usr/local/bin/redis-check-rdb // 用于修复出问题的dump.rdb文件
/usr/local/bin/redis-server // redis的服务端

1.3了解redis服务的配置文件

redis-server 可以指定配置文件来启动服务,这里在redis的安装目录下有个redis.conf模板,我们查看下模板中都有哪些配置

[root@localhost ~]# cat /opt/redis-5.0./redis.conf | grep -v "^#" | grep -v "^$   // 过滤掉注释和空行
bind 127.0.0.1 // 绑定服务器IP地址,多个使用空格进行分隔,如果不指定bind默认监听本机所有可用的网络接口
protected-mode yes // 服务器的安全模式
port // 服务器的端口号
tcp-backlog // TCP连接中已完成队列(完成三次握手之后)的长度
timeout // 客户端空闲n秒后关闭连接(0表示不主动关闭连接)
tcp-keepalive // TCP长连接单位秒(300秒没有活动关闭连接)
daemonize no // 守护进程建议使用yes启用守护进程,如果是no会阻塞shell窗口
supervised no // 可以通过upstart和systemd管理Redis守护进程,这个参数是和具体的操作系统相关的
pidfile /var/run/redis_6379.pid
loglevel notice // 日志级别。可选项有:debug(记录大量日志信息,适用于开发、测试阶段); verbose(较多日志信息); notice(适量日志信息,使用于生产环境);warning(仅有部分重要、关键信息才会被记录)。
logfile "" // 日志文件的位置,当指定为空字符串时,为标准输出,如果redis已守护进程模式运行,那么日志将会输出到 /dev/null 。
databases // 设置数据库的数目
always-show-logo yes
save // 保存数据到磁盘。格式是:save <seconds> <changes> ,含义是在 seconds 秒之后至少有 changes个keys 发生改变则保存一次
save
save
stop-writes-on-bgsave-error yes // 默认情况下,如果 redis 最后一次的后台保存失败,redis 将停止接受写操作,这样以一种强硬的方式让用户知道数据不能正确的持久化到磁盘, 否则就会没人注意到灾难的发生。 如果后台保存进程重新启动工作了,redis 也将自动的允许写操作。然而你要是安装了靠谱的监控,你可能不希望 redis 这样做,那你就改成 no 好了。 rdbcompression yes // 是否在dump .rdb数据库的时候压缩字符串,默认设置为yes。如果你想节约一些cpu资源的话,可以把它设置为no,这样的话数据集就可能会比较大
rdbchecksum yes // 是否CRC64校验rdb文件,会有一定的性能损失(大概10%)。
dbfilename dump.rdb // dump 的reb文件名字
dir ./ // 数据库的工作目录
replica-serve-stale-data yes //#当副本失去与主服务器的连接时,或当复制仍在进行中,副本可以以两种不同的方式进行操作:1)如果副本服务过时数据设置为“是”(默认值),则副本将仍然答复客户端请求,可能包含过期数据,或者如果这是第一次同步,则数据集可能为空。 // 2)如果副本服务过时数据设置为“否”,则副本将使用对所有类型的命令执行“与正在进行的主控形状同步”错误。但是,对于信息、复制、AUTH、ping、关机、复制、角色、配置,订阅,取消订阅,psubscribe,punsubscribe,publish,pubsub,命令、发布、主机:和延迟。
replica-read-only yes // 设置slave是否是只读的。从2.6版起,slave默认是只读的
repl-diskless-sync no // 主从数据复制是否使用无硬盘复制功能。
repl-diskless-sync-delay // 当启用无盘复制时,可以配置延迟。服务器等待,以便生成通过套接字传输RDB的子节点。复制品。这一点很重要,因为一旦转移开始,就不可能服务新的副本到达,将排队等待下一次RDB传输,因此服务器等待一段时间,以便让更多的副本到达。延迟以秒为单位指定,默认为5秒。禁用它完全设置为0秒,传输将尽快开始。
repl-disable-tcp-nodelay no
replica-priority
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit
slowlog-log-slower-than
slowlog-max-len
latency-monitor-threshold
notify-keyspace-events ""
hash-max-ziplist-entries
hash-max-ziplist-value
list-max-ziplist-size -
list-compress-depth
set-max-intset-entries
zset-max-ziplist-entries
zset-max-ziplist-value
hll-sparse-max-bytes
stream-node-max-bytes
stream-node-max-entries
activerehashing yes
client-output-buffer-limit normal
client-output-buffer-limit replica 256mb 64mb
client-output-buffer-limit pubsub 32mb 8mb
hz
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes

关于redis的优化,不在本文讨论范围内,下面我们手动创建一个配置文件来运行redis服务

1.4使用系统默认的配置文件登陆redis

[root@localhost ~]# redis-server 

开启后你会看到如下界面,shell被redis给阻塞住了。

新开一个shell,登陆redis

1.5创建自定义的redis配置文件

[root@localhost ~]# vim /opt/redis-5.0./myself.conf
bind 192.168.10.10 // 绑定IP地址
protected-mode yes // 开启安全模式
port 9000 // 指定服务器端口
daemonize yes // 开启守护进程
requirepass .com // 登陆密码

1.5.1使用我们自定义的redis配置文件登陆redis服务器

[root@localhost ~]# vim /opt/redis-5.0./myself.conf   // 指定配置文件开启服务

使用客户端登陆(这里需要注意,如果是在当前shell开启的redis服务,这里就必须使用绝对路径来使用客户端。如果是新开一个shell就不会有这样的问题)

[root@localhost ~]# /usr/local/bin/redis-cli -p  -h 192.168.10.10  

至此redis服务的启动,和登陆就到这里吧,下面我们来看一下redis的数据结构。


2.redis的数据结构

redis是一种高级的key:value存储系统,其中value支持五种数据类型
字符串(strings)
散列(hashes)
列表(lists)
集合(sets)
有序集合(sorted sets)

如果对Python有所了解相信对上面的数据类型并不会陌生。

2.1字符串string的常用命令

set    // 设置key
get // 获取key
append // 追加string
mset // 设置多个键值对
mget // 获取多个键值对
del // 删除key
incr // 递增+1
decr // 递减-1

2.2list类型的常用命令

lpush           // 从列表左边插
rpush // 从列表右边插
lrange // 获取一定长度的元素 lrange key start stop
ltrim // 截取一定长度列表
lpop // 删除最左边一个元素
rpop // 删除最右边一个元素
lpushx/rpushx // key存在则添加值,不存在不处理

2.3set类型的常用命令

sadd        // 添加元素
srem // 删除元素
sismember // 判断是否为set的一个元素
smembers // 返回集合所有的成员
sdiff // 返回一个集合和其他集合的差异
sinter // 返回几个集合的交集
sunion // 返回几个集合的并集

2.4有序集合常用命令

ZADD         // 添加有序集合
ZREM // 删除有序集合中的元素
ZREVRANGE // 倒叙
ZRANGE // 正序
ZCARD // 有序集合的基数
ZSCORE // 返回成员的值
ZRANK // 返回有序集合中成员的排名

2.5哈希数据结构

hset       // 设置散列值
hget // 获取散列值
hmset // 设置多对散列值
hmget // 获取多对散列值
hsetnx // 如果散列已经存在,则不设置(防止覆盖key)
hkeys // 返回所有keys
hvals // 返回所有values
hlen // 返回散列包含域(field)的数量
hdel // 删除散列指定的域(field)
hexists // 判断是否存在

2.6redis的基础命令

keys *        // 查看所有key
type key // 查看key类型
ttl key // 查看key过期剩余时间-1表示存在,-2表示key已经不存在了
persist // 取消key的过期时间-1表示key存在,没有过期时间
exists key // 判断key存在存在返回1否则0
del keys // 删除key可以删除多个
dbsize // 计算key的数量
expire key seconds // 过期时间

好吧redis先简单介绍到这里吧。。。。。。。。。

小结:

  • redis是一种内存型的nosql数据库,因此读写性能特别快,通常用来做数据的缓存。
  • redis存储数据的方法是以key-value的形式。
  • redis的key通常都是字符串。
  • redis的value类型支持字符串、列表、哈希、等多种类型。
  • redis可以使用rdb和aof做数据的持久化存储,并且支持事物以及多实例等。
  • redis由于是内存型数据库,所以存储数据的大小受机器内存的影响。

初识redis(redis基础命令)的更多相关文章

  1. Redis从基础命令到实战之有序集合类型(SortedSet)

    有序集合类型是Redis五种数据类型中最高级的.也是最复杂的类型.有序集合具有集合类型的特性,在其基础上给每个元素关联了一个分值,或称为权重,操作时既可以在添加元素时指定分值,也可以单独修改集合中某一 ...

  2. Redis从基础命令到实战之集合类型(Set)

    Redis集合类型的基础功能也是存储字符串列表,和列表类型的区别是字符串不能重复且没有顺序.当然,存储元素唯一性也可以通过应用程序保证,单从这一点上并没有体现出对比列表类型的特点. 其实,集合类型的一 ...

  3. Redis从基础命令到实战之列表类型(List)

    经过上一篇基于Redis散列类型的改造后,实战练习中的商品管理已经具备了增加.修改整体.修改部分属性和分页查询功能,但仍然不支持删除商品的功能.这是因为商品总数是以一个自增数字记录的,且关联了新商品k ...

  4. Redis从基础命令到实战之散列类型(Hash)

    从上一篇的实例中可以看出,用字符串类型存储对象有一些不足,在存储/读取时需要进行序列化/反序列化,即时只想修改一项内容,如价格,也必须修改整个键值.不仅增大开发的复杂度,也增加了不必要的性能开销. 一 ...

  5. Redis从基础命令到实战之字符串类型

    字符串类型是Redis中最基本的数据类型,能存储任何形式的字符串和和二进制数据.本文以代码形式列举常用的操作命令,并在实践部分演示一个简单的商品管理功能,实现了通常使用关系型数据库开发的增改查功能,注 ...

  6. redis之基础命令

    一.redis介绍 1.redis特性 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件 redis是c语言编写的,支持数据持久化,是key-val ...

  7. redis的基础命令操作

    文章目录 前言 一.字符串类型 二.哈希类型 三.列表类型 四.集合类型 五.有序集合类型 六.通过命令 前言 redis的数据结构 redis存储的是key,value格式的数据,其中的key是字符 ...

  8. windows下使用redis,Redis入门使用,Redis基础命令

    windows下使用redis,Redis入门使用,Redis基础命令 >>>>>>>>>>>>>>>> ...

  9. 【redis】redis基础命令学习集合

    写在前面 Redis是一个高速的内存数据库,它的应用十分广泛,可以说是服务端必学必精的东西.然而,学以致用,无用则无为.学了的东西必须反复的去用,去实践,方能有真知.这篇文章记录了我在redis学习过 ...

随机推荐

  1. BitTorrent协议与MagNet协议原理【转】

    转自:https://blog.csdn.net/u012785382/article/details/70674875 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog ...

  2. 2019CCPC 秦皇岛 E.Escape

    传送门 题意: 给出一个\(n*m\)的迷宫,有\(a\)个入口,\(b\)个出口. 现在有\(a\)个机器人都从入口出发,一开始方向默认为下,你可以选在在一些格子上面放置一个转向器,转向器有四种: ...

  3. 网络编程socket模块subprocess模块 粘包的解决

    什么是socket? tcp 可靠地面向连接协议 udp 不可靠的,无连接的服务,传送效率高

  4. Mybatis-plus入门学习]

    需要的数据库建表语句: #创建用户表 CREATE TABLE user ( id BIGINT(20) PRIMARY KEY NOT NULL COMMENT '主键', name VARCHAR ...

  5. 0.Jenkins 介绍

    一.持续集成的概念 continuous  intergaration  (简称CI),持续集成. 持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味 ...

  6. CF1256(div3 java题解)

    A: 题意:给定A个N元,B个一元,问是否可以凑成S元. 思路:A*i+j=S 即 A*I<=S<=A*I+B 即min(S/N,A)+B>=S: /* @author nimphy ...

  7. T430 Linux Setting Memo

    touchpad:xinput listxinput --disable 11 dns setting:/etc/resolv.conf vpn:@Darkduck19XX yum-config-ma ...

  8. 5.Vue的组件

    1.什么是组件 组件是可复用的Vue实例,也就是一组可以复用的模版,类似JSTL的自定义标签. 你可能会有页头.侧边栏.内容区等组件,每个组件又包含了其它的像导航链接.博文之类的组件. 2.第一个Vu ...

  9. 【day03】Xhtml

    一.HTML公共属性 1. title 提示 2. class 3. id 4. style 说明:除了 html,head,body,link,meta外其他标记都可使用的属性    二.表单  1 ...

  10. Appium入门指南 - 环境搭建和Case编写

    本文档将详细介绍如何搭建 Appium 的运行环境,以及如何编写一个简单的 UI 自动化测试用例.其中,也会穿插讲解一些 Appium 的基本知识.关于 Appium 的更多信息,大家可以查看官方文档 ...