一:Redis的常用命令 Redis提供了丰富的命令对数据库和各种数据库类型进行操作,这些命令可以在Linux终端使用。 1:键值相关命令。 (1)keys
返回满足给定pattern的所有Key; (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)dbsize127.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相同的数据库副本。 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学习视频的笔记和自己的实践总结而成。 |
|