设为首页 收藏本站
查看: 1269|回复: 0

[经验分享] Redis数据库的学习与实践—Redis的常用命令及高级应用

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-9-15 09:41:38 | 显示全部楼层 |阅读模式
     一:Redis的常用命令
Redis提供了丰富的命令对数据库和各种数据库类型进行操作,这些命令可以在Linux终端使用。
  1:键值相关命令。   (1)keys
返回满足给定pattern的所有Key;
keys *
keys my*
  (2)exists
确认一个key是否存在;
#存在返回1
127.0.0.1:6379> exists name
(integer) 1
#不存在返回0
127.0.0.1:6379> exists you
(integer) 0
  (3)del
    删除一个key;
127.0.0.1:6379> del name
(integer) 1
127.0.0.1:6379> del you
(integer) 0
  (4)expire
设置一个key的过期时间;
127.0.0.1:6379> expire name 10
(integer) 1
127.0.0.1:6379> get name
"inter"
127.0.0.1:6379> get name
"inter"
127.0.0.1:6379> get name
"inter"
127.0.0.1:6379> get name
(nil)
   (5)move
将当前数据库中的key转移到其他数据库当中;
127.0.0.1:6379> select 0
OK
127.0.0.1:6379> set sex boy
OK
127.0.0.1:6379> get sex
"boy"
127.0.0.1:6379> move sex 1
(integer) 1
127.0.0.1:6379> get sex
(nil)
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> get sex
"boy"
   (6)persist
移除给定key的过期时间;
127.0.0.1:6379> expire name 300
(integer) 1
127.0.0.1:6379> ttl name
(integer) 296
127.0.0.1:6379> persist name
(integer) 1
127.0.0.1:6379> ttl name
(integer) -1
   (7)randomkey
随机返回key空间的一个key;
127.0.0.1:6379> randomkey
"name"
   (8)rename
重命名key;
127.0.0.1:6379> set name hello
OK
127.0.0.1:6379> rename name you
OK
127.0.0.1:6379> get you
"hello"
   (9)type
返回值的类型。
127.0.0.1:6379> type you
string
  2:服务器相关命令。  (1)ping
测试连接是否存活;
#输入ping返回pong,说明网络连接成功
#返回could not connect to Redis at 127.0.0.1:6379:Connection refused 说明网络连接不成功
127.0.0.1:6379> ping
PONG
   (2)echo
  在命令行打印内容;
127.0.0.1:6379> echo you
"you"
   (3)select
选择数据库,Redis数据库编号从0~15,我们可以选择任意一个数据库来进行数据的存取;
127.0.0.1:6379> select 10
OK
127.0.0.1:6379[10]>
   (4)quit
退出连接;
127.0.0.1:6379> quit
djy@ubuntu:~/toolkit/redis/src$
   (5)dbsize
127.0.0.1:6379> dbsize
(integer) 2
127.0.0.1:6379>
   (6)info
  redis服务器的信息;
127.0.0.1:6379> info
# Server
redis_version:2.8.13
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:b762f6d0aafec306
redis_mode:standalone
os:Linux 3.8.0-19-generic x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:4.7.3
process_id:28321
run_id:8ebdbe81c7153e1e6bd0979d365ca9c8480f8c9f
tcp_port:6379
uptime_in_seconds:2155
uptime_in_days:0
hz:10
lru_clock:15851433
config_file:/home/djy/toolkit/redis/redis.conf
   (7)configget
  实时转储收到的请求,返回相关配置的参数;
127.0.0.1:6379> config get save
1) "save"
2) "900 1 300 10 60 10000"
127.0.0.1:6379>
   (8)flushdb
  删除当前选择数据库中的所有key;
127.0.0.1:6379> keys *
1) "name"
2) "you"
3) "sex"
4) "new_name"
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> keys *
(empty list or set)
   (9)flushall
删除所有数据库中的所有key;
     二:Redis高级实用特性   (1)安全性
设置客户端连接后进行任何其他指定前需要使用的密码。
#进入redis文件夹,修改redis.conf文件
#requirepass foobared
requirepass djy
#之后进入客户端,操作redis数据库的时候,要进行授权操作
auth djy
#或者在进入客户端的时候,输入
redis-cli –a djy
警告:因为redis速度相当快,所以在一台比较好的服务器下,一个外部的用户可以在一秒钟进行150k次的密码尝试,这意味着你需要指定非常非常强大的密码来防止暴力破解。
  (2)主从复制
Redis主从复制配置和使用都非常简单。通过主从复制可以允许多个slave server拥有和master server相同的数据库副本。
  • 特点:

  • Master可以拥有多个slave;
  • 多个slave可以连接同一个master,还可以连接到其他slave;
  • 主从复制不会阻塞master,在同步数据时,master可以继续处理client请求;
  • 提高系统的伸缩性。

  • 主从复制过程:

  • Slave与master建立连接,发送sync同步命令
  • Master会启动一个后台进程,将数据库快照保存到文件中,同时master住进程会开始收集新的写命令并缓存。
  • 后台完成保存后,就将此文件发送给slave
  • Slave将此文件保存到硬盘上

  • 配置主从服务器

  • 在slave的配置文件(redis.conf)中加入以下配置:

slaveof192.168.1.1 6379 #指定master的ip和端口
masterauthlamp #这是主机的密码
#设置完成后,可以通过info命令来查看主从信息(role:master/slave)
(3)事务处理
Redis对事务的支持目前还比较简单。Redis只能保证一个client发起的事务中的命令可以连续的执行,而中间不会插入其他client的命令。当一个client在一个连接中发出multi命令时,这个连接会进入一个事务上下文,该连接后续的命令不会立即执行,而是先放到一个队列中,当执行exec命令时,redis会顺序的执行队列中的所有命令。
简单事务处理:
127.0.0.1:6379> get age
"30"
127.0.0.1:6379>multi
OK
127.0.0.1:6379> set age 10
QUEUED
127.0.0.1:6379> set age 20
QUEUED
127.0.0.1:6379> exec
1) OK
2) OK
127.0.0.1:6379> get age
"20"
取消一个事务:
127.0.0.1:6379> get age
"20"
127.0.0.1:6379> multi
OK
127.0.0.1:6379> set age 30
QUEUED
127.0.0.1:6379> set age 50
QUEUED
127.0.0.1:6379>discard
OK
127.0.0.1:6379> get age
"20"
  Redis事务的缺陷,通常来说,事务中的每一个事务都要执行成功,事务里的所有操作才会生效。但是Redis事务的缺陷就是,当事务中的操作,有一个没有成功的时候,另外一个操作照样成功。这样事务在某一个操作错误的时候,没有了回滚的机制,这是有待改进的地方。
乐观锁:复杂事务控制
  大多是基于数据版本(version)的记录机制实现的。即为数据增加一个版本表示,在基于数据库表的版本解决方案中,一般是通过为数据库表添加一个“version”字段来实现读取出数据时,将此版本号一同读出,之后更新时,对此版本号加1。此时,将提交数据的版本号与数据库表对应记录的当前版本号进行比对,如果提交的数据版本号大于数据库当前版本号,则予以更新,否则认为是过期数据。
Redis乐观锁实例:
假设有一个age的key,我们开2个session来对age进行赋值操作,我们来看一下结果。
#第一步session1
127.0.0.1:6379> get age
"20"
127.0.0.1:6379>watch age
OK
127.0.0.1:6379> multi
OK
#第二步session2
127.0.0.1:6379> set age 30
OK
127.0.0.1:6379> get age
"30"
#第三步session1
127.0.0.1:6379> set age 20
QUEUED
127.0.0.1:6379> exec
(nil)
127.0.0.1:6379> get age
"30"
Watch命令会见识给定的key,当exec时,如果监视的key从调用watch后发生过变化,则整个事务会失败。也可以调用watch多次监视多个key。这样就可以对指定的key加乐观锁了。注意watch的key是对整个连接有效的,事务也一样。如果连接断开,监视和事务都会被自动清除。当然了exec,discard,unwatch命令都会清除连接中的所有监视。
(4)持久化机制
Redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到硬盘来保证持久化。
Redis支持两种持久化方式:snapshotting(快照)也是默认方式;Append-only file(缩写aof)的方式。
(5)发布订阅消息
发布订阅(pub/sub)是一种消息通信模式,主要的目的是接触消息发布者和消息订阅者之间的耦合,Redis作为一个pub/sub的server,在订阅者和发布者之间起到了消息路由的功能。订阅者可以通过subscribe和psubscribe命令向redis server订阅自己感兴趣的消息类型,redis将信息类型称为通道(channel)。当发布者通过publish命令向redis server发送特定类型的信息时,订阅该信息类型的全部client都会受到此消息。
(6)虚拟内存的使用
Redis的虚拟内存与操作系统的虚拟内存不是一回事,但是思路和目的都是相同的。都是暂时把不经常访问的数据从内存交换到磁盘中,从而腾出宝贵的内存空间用于其他需要访问的数据。尤其是对于redis这样的内存数据库,内存总是不够用的。除了可以将数据分割到多个redisserver外。另外能够提高数据库容量的办法就是使用虚拟内存把那些不经常访问的数据交换到磁盘上。
Vm-enabled yes            #开启vm功能
Vm-swap-file /tmp/redis.swap #交换出来的value保存的文件路径
Vm-max-memory 1000000   #redis使用的最大内存上限
Vm-page-size 32            #每个页面的大小32字节
Vm-pages 13417728        #最多使用多少页面
Vm-max-threads4           #用于执行value对象换入患处的工作线程数量

注:Redis系列博客均是结合兄弟连Redis学习视频的笔记和自己的实践总结而成。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-24806-1-1.html 上篇帖子: Redis数据库的学习与实践—redis的数据类型 下篇帖子: Redis主从搭建 数据库
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表