redis是什么
Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker. It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs and geospatial indexes with radius queries.
开源的,BSD许可,高级的key-value存储系统,可以用来存储字符串、哈希结构、链表、集合,因此常用来提供数据结构服务。
redis和memcached相比的独特之处
- redis可以用来做存储(storge),而memcached是用来做缓存(cache),这个特点主要是因为其“持久化”的功能。
- 存储的数据结构:对于memcache来说,存储的数据只有1种类型——字符串,而redis则可以存储字符串、链表、哈希结构、集合、有序集合。
Redis对于key的操作命令
keys pattern
查询相应的key
- keys *
- keys site
- keys sit[e|y]
在redis里,允许模糊查询key
有3个通配符 *, ? ,[]
- *: 通配任意多个字符
- ?: 通配单个字符
- []: 通配括号内的某1个字符
redis 127.0.0.1:6379> flushdb
OK
redis 127.0.0.1:6379> keys *
(empty list or set)
redis 127.0.0.1:6379> mset one 1 two 2 three 3 four 4
OK
redis 127.0.0.1:6379> keys o*
1) "one"
redis 127.0.0.1:6379> key *o
(error) ERR unknown command 'key'
redis 127.0.0.1:6379> keys *o
1) "two"
redis 127.0.0.1:6379> keys ???
1) "one"
2) "two"
redis 127.0.0.1:6379> keys on?
1) "one"
redis 127.0.0.1:6379> set ons yes
OK
redis 127.0.0.1:6379> keys on[eaw]
1)"one"
randomkey
返回随机key
exists key
判断key是否存在,返回值是1/0
type key
返回key存储值的类型
有String、link、set、order set、hash
ttl key
查询key的生命周期,返回的是秒数
注:对于不存在的key或已过期的key 和 不过期永久有效的key,都返回-1 Redis2.8中,对于不存在的key,返回-2
expire key 整型值
设置key的生命周期,以秒为单位
同理:
- pexpire key 毫秒数, 设置生命周期
- pttl key, 以毫秒返回生命周期
persist key
把key设置为永久有效
del key1 key2 … keyn
删除1个或者多个键,不存在的key忽略掉,返回真正删除的key的个数
rename key newKey
给key一个新的newKey名,如果newKey已经存在,则newKey的原值被覆盖
renamenx key newKey
把key改名为newKey,发生修改返回1,未发生修改返回0
注:nx——>not exists,即newKey不存在时作改名动作,存在则不改防止跟已有的冲突
move key db
将key移到某个数据库
注意: 一个redis进程,打开了不止一个数据库, 默认打开16个数据库,从0到15编号,如果想打开更多数据库,可以从配置文件修改
redis 127.0.0.1:6379[1]> select 2
OK
redis 127.0.0.1:6379[2]> keys *
(empty list or set)
redis 127.0.0.1:6379[2]> select 0
OK
redis 127.0.0.1:6379> keys *
1) "name"
2) "cc"
3) "a"
4) "b"
redis 127.0.0.1:6379> move cc 2
(integer) 1
redis 127.0.0.1:6379> select 2
OK
redis 127.0.0.1:6379[2]> keys *
1) "cc"
redis 127.0.0.1:6379[2]> get cc
"3"
Redis字符串类型的操作
set key value [ ex 秒数 ] / [px 毫秒数] [ nx ] / [xx]
设置key值的同时设置有效期,同时写以后面的有效期为准
set a 1 ex 10 //10秒有效
set a 1 px 9000 //9秒有效
set a 1 ex 100 px 9000 //同时写以后面的有效期为准,这里是9000毫秒
nx: 表示只有key不存在时才能执行操作
xx: 表示key必须存在时,执行操作
mset key1 value1 key2 value2 …
一次性设置多个key值
例: mset key1 v1 key2 v2 ….
get key
获取key的值
mget key1 key2 … keyn
获取多个key值
setrange key offset value
字符串的offset偏移字节,改成value
redis 127.0.0.1:6379> set greet hello
OK
redis 127.0.0.1:6379> setrange greet 2 x
(integer) 5
redis 127.0.0.1:6379> get greet
"hexlo"
注意: 如果偏移量>字符长度, 该字符自动补0x00
redis 127.0.0.1:6379> setrange greet 6 !
(integer) 7
redis 127.0.0.1:6379> get greet
"heyyo\x00!"
append key value
把value追加到key的原值上
getrange key start stop
是获取字符串中 [start, stop]范围的值
注意: 对于字符串的下标,左数从0开始,右数从-1开始
redis 127.0.0.1:6379> set title 'chinese'
OK
redis 127.0.0.1:6379> getrange title 0 3
"chin"