键可以包含字符串strings,哈希hashes,链表lists,集合sets,有序集合sorted sets
string是最简单的类型,一个key对应一个value,string类型是二进制安全的
redis的string可以包含任何数据,比如JPG图片或序列化的对象
设置key对应的值为string类型的value
例如:添加一个name=lijie的键值对
redis 127.0.0.1:6379> set name lijie
ok
获取设置的name值
redis 127.0.0.1:6379> get name
设置key 对应的值为string类型的value
如果key已经存在,返回0,nx是not exists的意思
127.0.0.1:6379> set name hanchao
OK
127.0.0.1:6379> setnx name ha
(integer) 0
设置key 对应的值为string类型的value 并指定此键值对应的有效期
例如:添加一个haircolor=red的键值对,并指定有效期为10秒
redis 127.0.0.1:6379> setex haircolor 10 red
设置指定key的value值的子字符串
例如:将lijie的126邮箱替换为gmail邮箱
如果替换的字符串没有原来的字符串长,则长于替换的字符串的字符将被保留
redis 127.0.0.1:6379> get name
"[email protected]"
redis 127.0.0.1:6379> setrange name 6 gmail.com
(integer) 15
redis 127.0.0.1:6379> get name
"[email protected]"
一次设置多个key的值,成功返回OK表示所有的值都设置了,失败返回0表示没有任何值被设置
redis 127.0.0.1:6379> mset key1 lijie1 key2 lijie2
ok
redis 127.0.0.1:6379> get key1
"lijie1"
redis 127.0.0.1:6379> get key2
"lijie2"
一次设置多个key的值,成功返回OK表示所有的值都设置了
失败返回0表示没有任何值被设置,但是不会覆盖已经存在的key
如果有键值存在则所有值都不会被设置,返回0
127.0.0.1:6379> msetnx key1 value1 key2 value2
(integer) 1
获取key对应的string值,如果key不存在则返回nil
设置key的值,并返回key的旧值
127.0.0.1:6379> get name
"hanchao"
127.0.0.1:6379> getset name tom
"hanchao"
127.0.0.1:6379> get name
"tom"
获取key的value值的子字符串
redis 127.0.0.1:6379> getrange name 0 5
0表示起始位置 5表示结束字符位置 就是截取0-5 的字符
一次获取多个key的值,如果对应key不存在,则对应返回nil
127.0.0.1:6379> mget key1 key2 key3
1) "value1"
2) "value2"
3) (nil)
对key的值做++操作,并返回新的值
127.0.0.1:6379> set key1 123
OK
127.0.0.1:6379> incr key1
(integer) 124
同incr类似,加指定值,key不存在的时候会设置key,并认为原来的value是0
redis 127.0.0.1:6379> incrby key4 3 key4+3
redis 127.0.0.1:6379> incrby key4 -2 key4-2
对key的值做--操作
127.0.0.1:6379> set age 11
OK
127.0.0.1:6379> decr age
(integer) 10
同decr类似,减指定值
127.0.0.1:6379> get key4
"6"
127.0.0.1:6379> decrby key4 2
(integer) 4
127.0.0.1:6379>
给指定key的字符串追加value,返回新字符串值的长度
127.0.0.1:6379> get name
"hanchao123"
127.0.0.1:6379> append name @gmail.com
(integer) 20
127.0.0.1:6379> get name
取指定key的value值的长度
127.0.0.1:6379> strlen name
(integer) 7
删除指定key的值
redis 127.0.0.1:6379> del name
(integer) 1
Redis hash 是一个string类型的field和value的映射表
它的添加,删除操作都是0(1)(平均)
hash特别适合用于存储对象
相较于将对象的每个字段存成单个string类型,
将一个对象存储在hash类型中会占用更少的内存 并且可以更方便的存取整个对象
设置hash field 为指定值,如果key不存在,则先创建
redis 127.0.0.1:6379> hset myhash field1 hello
设置hash field 为指定值,如果key不存在,则先创建,如果存在则返回0
127.0.0.1:6379> hset myhash field1 jerry
(integer) 0
同时设置hash的多个field
127.0.0.1:6379> hmset myhash field3 value3 field4 value4
OK
获取指定的hash field
hget myhash field1
获取全部指定的hash field
127.0.0.1:6379> hmget myhash field1 field3
1) "jerry"
"value3"
指定的hash field 加上给定的值
127.0.0.1:6379> hset myhash age 20
(integer) 1
127.0.0.1:6379> hincrby myhash age 10
(integer) 30
测试指定field是否存在
127.0.0.1:6379> hexists myhash fields
(integer) 0
127.0.0.1:6379> hexists myhash field1
(integer) 1
返回指定hash的field数量
127.0.0.1:6379> hlen myhash
(integer) 5
删除指定hash的field
redis 127.0.0.1:6379> hdel myhash age
返回hash的所有field
redis 127.0.0.1:6379> hkeys myhash
返回hash的所有value
0.0.1:6379> hvals myhash
1) "jerry"
2) "world"
3) "value3"
4) "value4"
5) "20"
获取某个hash中全部的field以及value
redis 127.0.0.1:6379> hgetall myhash
list是一个链表结构,主要功能是push,pop,获取一个范围的所有值等等
操作中key理解为链表的名字
redis的list类型起始就是一个每个子元素都是string类型的双向链表
可以通过push,pop操作从链表的头部或者尾部添加删除元素
这样list既可以做栈,又可以作为队列
获取给定key范围的list元素
redis 127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "world"
在key对应list的头部添加字符串元素
redis 127.0.0.1:6379> lpush mylist "word"
(integer) 1
redis 127.0.0.1:6379> lpush mylist "hello"
(integer) 2
redis 127.0.0.1:6379> lrange mylist 0 -1 // lrange 0表示从头部取,-1表示到尾部
1) "hello"
2) "world"
在key对应list的尾部添加字符串元素
redis 127.0.0.1:6379> rpush mylist2 "world"
(integer) 1
redis 127.0.0.1:6379> rpush mylist2 "hello"
(integer) 2
redis 127.0.0.1:6379> lrange mylist2 0 -1
1) "world"
2) "hello"
在key对应list的特定位置前或后添加字符串
redis 127.0.0.1:6379> rpush mylist3 "world"
(integer) 1
redis 127.0.0.1:6379> linsert mylist3 before "world" "hello"
(integer) 2
redis 127.0.0.1:6379>lrange mylist3 0 -1
1) "hello"
2) "world"
设置list中指定下标的元素值
redis 127.0.0.1:6379> rpush mylist4 "hello"
(integer) 1
redis 127.0.0.1:6379> lset mylist4 0 "world"
ok
redis 127.0.0.1:6379> lrange mylist4 0 -1
1) "world"
从key对应list中删除n个和value相同的元素 n<0 从尾删除 n=0 全部删除
redis 127.0.0.1:6379> rpush mylist5 "hello"
(integer) 1
redis 127.0.0.1:6379> rpush mylist5 "hello"
(integer) 2
redis 127.0.0.1:6379> lrem mylist5 1 "hello"
(integer) 1
保留指定key的值范围内的数据
redis 127.0.0.1:6379> rpush mylist8 "one"
(integer) 1
redis 127.0.0.1:6379> rpush mylist8 "two"
(integer) 2
redis 127.0.0.1:6379> ltrim mylist8 1 -1
(integer) 1
redis 127.0.0.1:6379> lrange mylist8 0 -1
1) "two"
从list的头部删除元素,并返回删除元素
redis 127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "world"
redis 127.0.0.1:6379> lpop mylist
"hello"
redis 127.0.0.1:6379> lrange mylist 0 -1
1) "world"
从list的尾部删除元素,并返回删除元素
redis 127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "world"
redis 127.0.0.1:6379> rpop mylist
"world"
redis 127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
从第一个list的尾部移除元素并添加到第二个list的头部
redis 127.0.0.1:6379> lrange mylist5 0 -1
1) "three"
2) "hello"
redis 127.0.0.1:6379> lrange mylist6 0 -1
1) "hello"
2) "foo"
redis 127.0.0.1:6379> rpoplpush mylist5 mylist6
"hello"
redis 127.0.0.1:6379> lrange mylist5 0 -1
1) "three"
redis 127.0.0.1:6379> lrange mylist6 0 -1
1) "hello"
2) "hello"
3) "foo"
返回名称为key的list中index位置的元素
redis 127.0.0.1:6379> lrange mylist5 0 -1
1) "three"
2) "foo"
redis 127.0.0.1:6379> lindex mylist5 0
"three"
redis 127.0.0.1:6379> lindex mylist5 1
"foo"
返回key对应list的长度
redis 127.0.0.1:6379> llen mylist5
(integer) 2