一、数据类型
1.有哪些类型
Redis是Key-Value型数据库,Key只有一种类型,字符串。Value的数据类型比较丰富,考虑来应用场合和使用场景,高效利用内存等因素,总共设计了5种类型:string, hash, list, set和zset。
2.string类型
string可以存储任何数据,一条string的记录最大1G。
常用操作:
(1)set key value
设置key对应string类型的value,返回1表示成功,返回0表示失败。
如果key不存在,则插入一条新的记录,如果key存在则更新此记录。
(2)setnx key value
与set基本功能相同,区别在于如果key存在,则不会执行命令。
(3)mset key1 value1 key2 value2 ...
批量设置多个key的string类型的value,只要其中任何一个key value设置成功就返回1,全部执行不成功则返回0。
(4)msetnx key1 value1 key2 value2 ...
与mset基本功能相同,区别在于如果批量操作中某些key已经存在,则不会更新这些key对应的value。
(5)get key
获取key对应的string类型的value,如果key不存在返回nil。
(6)mget key1 key2 ...
批量获取
(7)getset key value
先获取值再进行更新。如果key不存在返回nil。
(8)incr key
对key对应的value进行自增操作,key对应的value必须是一个整数,如果key不存在,则设置key值为1。
(9)incrby key integer
对key对应的value进行自增integer数值
(10)decr key
对key对应的value进行自减操作,key对应的value必须是一个整数,如果key不存在,则设置key值为-1。
(11)decrby key integer
对key对应的value进行自减integer数值
3.hash类型
hash类型是由多个string类型的key value对组成的映射表。
hash类型相对多个string类型key value对存储的优点:
将一个对象存储在hash类型中占用更少的内存(集中存储),并且可以方便的对整个对方进行存取。
常用操作:
(1)hset key field value
设置key对应的hash的字段field的值value。
(2)hmset key field value field value field value ...
批量设置key对应的hash的多个字段field的值value。
(3)hget key field
获取key对应的hash中指定的字段field的值
(4)hmget key field1 field2 field3 ...
批量获取key对应的hash中多个字段的值
(5)hkeys key
得到key对应的hash的所有字段
(6)hvals key
得到key对应的hash的所有value
(7)hgetall key
得到key对应的hash的所有field和value
(8)hlen key
得到key对应的hash的字段个数。
(9)hincrby key field integer
将指定的hash field加上指定的值 。成功返回hash field变更后的值。
(10)hexists key field
判断key对应的hash指定的字段是否存在。
(11)hdel key field
删除key对应的hash指定字段。
4.list类型
list类型是一个链表结构,是一个由string类型元素组成的双向链表。
主要操作就是push,pop,range等。
双向链表分左右,左为表头,右为表尾,可以双向进行操作,快速查询到链表中任一元素。
常用操作:
(1)lpush key value
在key对应的list的头部添加元素。
(2)rpush key value
在key对应的list的尾部添加元素。
(3)lpop key
从list的头部删除并返回删除的元素。
(4)rpop key
从list的尾部删除并返回删除的元素。
(5)blpop key1 key2... timeout
在timeout(超时时间,以秒为单位)时间内,从头到尾扫描,返回对第一个非空list进行lpop操作的结果,并返回删除的元素。
(6)brpop key1 key2... timeout
与blpop类似,方向不同,从尾到头扫描。
(7)llen key
返回key对应的list的元素个数。
(8)lrange key start end
返回指定区间内的元素,下标从0开始,负值表示逆向,即-1表示倒数第一个元素。
(9)ltrim key start end
截取list指定区间内的元素。
(10)lset key index value
更新指定下标的元素值。
(11)lrem key count value
从List的头部(count>0时)或尾部(count<0时)开始,删除count个等于value值的元素,返回删除的数量,count为0时表示删除全部等于value值的元素。
5.set类型
set是无序排重的,最大可包含2的32次方-1个元素。redis的set是通过hash table实现的。
set可以进行交集、并集、差集运算,可以应用在求共同好友、blog的tag功能等场景。
常用操作:
(1)sadd key member
添加一个string类型的元素到key对应的set集合中。
(2)srem key member
删除指定元素。
(3)spop key
随机删除set中的一个元素,并返回这个元素。
(4)smove sourcekey distkey member
从sourcekey对应的set中转移member对应的元素到diskey对应的set中。
(5)scard key
返回set中元素的个数
(6)sismember key member
判断member是否在set中。
(7)srandmember key
与spop类似,随机取得一个元素,但不删除这个元素。
(8)smembers key
得到集合中所有元素
(9)sinter key1 key2 ...
返回多个set集合的交集
(10)sinterstore distkey key1 key2 ...
返加key1 key2等多个set的交集,并存储在distkey对应的set中。
(12)sunion key1 key2 ...
返回多个set集合的并集
(13)sunionstore distkey key1 key2 ...
返加key1 key2等多个set的并集,并存储在distkey对应的set中。
(14)sdiff key1 key2 ...
返回多个set集合的差集,差集运算有顺序性,操作的key顺序不同,运算结果不同。
(15)sdiffstore distkey key1 key2 ...
返加key1 key2等多个set的差集,并存储在distkey对应的set中。
6.zset类型
zset即sorted set,有序集合,是在set的基础上为每个元素添加一个score属性,集合中的元素根据score大小进行排序。任何时候,zset都是有序的。
每次添加进一个新的元素或者集合中的元素的score发生变更时,zset会自动根据score重新排序。
常用操作:
(1)zadd key score1 member1 score2 member2...
添加元素到集合,元素如果存在,则更新对应的score
(2)zrem key member
删除指定元素,只删除一个
(3)zincrby key incr member
增加对应member的score,加完后元素会进行移动,以保证整个集合的有序性。
(4)zremrangebyrank key min max
对排名在min与max之间的元素进行删除
(5)zremrangebyscore key min max
按score进行区间删除
(6)zrank key member
返回指定元素在集合中的排名(下标,以0开始),集合中元素是按score从小到大升序的。
(7)zrevrank key member
返回降序排名
(8)zrange key start end
返回集合中指定区间的元素(升序)
(9)zrevrange key start end
返回集合中指定区间的元素(降序)
(10)zrangebyscore key min max
返回score在min到max之间的元素
(11)zcount key min max
返回集合中score在给定区间的数量
(12)zcard key
返回集合中元素的个数
(13)zscore key element
返回集合中指定元素的分数
二、对key进行操作
- 对key常用的操作有:
(1)exists key
判断指定key是否存在
(2)del key1 key2 ...
删除给定key,返回删除的数目,0表示给定key都不存在
(3)type key
返回给定key对应value的数据类型
(4)keys pattern
返回匹配指定模式的所有key,比如 keys user* 表示返回以user开头的所有key
(5)randomkey
随机返回当前数据库中一个key
(6)rename oldkey newkey
重命名一个key,如果newkey存在,将会进行覆盖
(7)renamenx oldkey newkey
重命名一个key,如果newkey存在,则不执行命令(不会覆盖)
(8)expire key seconds
为key指定过期时间
(9)ttl key
返回key的剩余过期时间,以秒为单位,<0表示key不存在或者已经过期。
(10)select db-index
切换数据库
(11)move key db-index
将key从当前数据库移动到指定数据库
三、常用管理命令
1. redis-cli交互式客户端
运行redis的bin目录下的redis-cli命令,进入交互式命令行
redis-cli -h 127.0.0.1 -p 6379 制定要连接的ip和端口号
redis-cli PING,ping redis的端口,看是否正常
redis-cli SHUTDOWN 关闭redis服务
2. 修改数据库数量
一个redis实例默认有16个数据库,可以在redis的conf配置文件中进行修改
databases 16
3.生成备份文件
关于数据持久化及备份策略,将在后面的教程中再深入探讨。此处只列出几个常用的命令:
(1)save
保存数据到硬盘dump.rdb备份文件中,会堵塞主进程
(2)bgsave
以后台进程保存数据到硬盘dump.rdb备份文件,不会堵塞主进程,常用
(3)shutdown save
安全关闭数据库,关闭前会先执行save备份操作。
(4)bgrewriteaof
异步执行重写一个AOF文件操作
4. 获取客户端连接
client list
可以得到连接到服务器的所有客户端
5. 结束客户端连接
client kill ipaddr:port
ipaddr为客户端IP,port为客户端端口
6. 标记当前连接名
client setname name
为当前连接设置一个name,区分与其他连接
7. 获取服务器端统计信息
info [section]
section参数可省略,省略表示显示所有信息
加上对应的section可以显示对应分块的统计信息,比如 info cpu得到服务器cpu使用情况, info replication得到replication复制方面的信息等等。
8. 清空数据
(1)flushdb
清空当前数据库所有key
(2)flushall
清空所有数据库所有key
9. 热修改Replication角色
(1)role
查询当前服务器的角色
(2)slaveof masterip:port
设置本实例为masterip:port服务器的从服务器
10.热修改配置信息
(1)config get setting
获取当前setting对应的配置的信息,比如config get timeout得到当前配置的连接超时时间
(2)config set setting value
设置当前setting对应的配置的信息