安装
-
下载并安装
$ wget http://download.redis.io/releases/redis-6.0.8.tar.gz
$ tar xzf redis-6.0.8.tar.gz
$ cd redis-6.0.8
$ make
make完后 redis-6.0.8目录下会出现编译后的redis服务程序redis-server, 还有用于测试的客户端程序redis-cli, 两个程序位于安装目录 src 目录下。 -
启动redis服务
- 用的是默认配置
$ cd src
$ ./redis-server
- 使用自己的配置文件
$ cd src
$ ./redis-server /root/redis-6.0.8/redis.conf
- 端口号冲突:
Could not create server TCP listening socket 127.0.0.1:6379: bind: Address already in use
$ ps -ef | grep redis
$ kill -9 10096
重新启动redis
$ ./redis-server /root/redis-6.0.8/redis.conf
-
内存警告
overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add ‘vm.overcommit_memory = 1’ to/etc/sysctl.conf and then reboot or run the command ‘sysctl vm.overcommit_memory=1’ for this to take effect.
解决办法:将vm.overcommit_memory = 1添加到/etc/sysctl.conf中,然后执行sysctl -p生效配置。 -
警告
The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128
解决办法:将net.core.somaxconn = 1024添加到/etc/sysctl.conf中,然后执行sysctl -p生效配置。 -
警告
you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix thisissue run the command ‘echo never > /sys/kernel/mm/transparent_hugepage/enabled’ as root, and add it to your /etc/rc.local in order to retain thesetting after a reboot. Redis must be restarted after THP is disabled.
解决办法:将echo never > /sys/kernel/mm/transparent_hugepage/enabled添加到/etc/rc.local中,然后执行source /etc/rc.local生效配置。 -
启动客户端
$ ./redis-cli
$ ./redis-cli --raw
支持中文
退出
127.0.0.1:6379> exit
-
选择数据库
Redis默认有从0-15,16个数据库,默认选择0号数据库。
选择2号数据库:
$ select 2
Redis数据类型
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
- 添加/修改字符串值
set: 键不存在,添加;键存在,修改
- 添加键值对
set key value
- 添加键值对,同时设置过期时间
setex key seconds value
- 同时添加多个键值对
mset key1 value1 key2 value2 key value3....
- 追加值(在原有值后拼接)
append key str
- 获取单个值
get key
- 获取多个值
mget key1 key2 key3...
- 删除键值对
del key
- 删除多个键
del key1 key2...
- 查找键(支持通配符)
keys name
keys *
- 判断键是否存在
exists key
如果键存在,返回1; 不存在,返回0 - 查看键对应value是什么类型
type key
- 设置已有键的过期时间
expire key seconds
- 查看键有效时间
ttl key
返回 >0 代表有效时间,单位:秒
返回 -1 为永远有效
返回 -2 为键不存在
# 没有过期时间
redis 127.0.0.1:6379> SET name "xiaobai"
OK
redis 127.0.0.1:6379> GET name
"xiaobai"
redis 127.0.0.1:6379> SET name "xiaohuang"
OK
redis 127.0.0.1:6379> GET name
"xiaohuang"
# 设置过期时间5秒(5秒后数据自动删除)
127.0.0.1:6379> setex gender 5 "男"
OK
127.0.0.1:6379> get gender
"男"
127.0.0.1:6379> get gender # 5秒之后
(nil)
# 同时添加多个键值对
127.0.0.1:6379> mset name1 "xiaoyi" name2 "xiaoer" name3 "xiaosan"
OK
127.0.0.1:6379> get name1
"xiaoyi"
127.0.0.1:6379> get name3
"xiaosan"
# 追加值
127.0.0.1:6379> set name "test"
OK
127.0.0.1:6379> get name
"test"
127.0.0.1:6379> append name "123"
(integer) 7
127.0.0.1:6379> get name
"test123"
# 获取多个值
127.0.0.1:6379> mget name1 name2 name3
1) "xiaoyi"
2) "xiaoer"
3) "xiaosan"
# 查找键
127.0.0.1:6379> keys name
1) "name"
127.0.0.1:6379> keys *
1) "name"
2) "name2"
3) "name3"
4) "name1"
127.0.0.1:6379> keys ?ame
1) "name"
# 判断键是否存在
127.0.0.1:6379> exists name
(integer) 1
# 查看key对应value的类型
127.0.0.1:6379> type name
string
# 设置name3的过期时间为100秒
127.0.0.1:6379> expire name3 100
(integer) 1
# 查看name的有效时间
127.0.0.1:6379> ttl name
(integer) -1
-
Redis 哈希(Hash)
Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。
Redis hash表
- 设置单个字段
hset key field value
如果字段不存在,则添加;存在,则修改 - 设置多个字段
hmset key field1 value1 filed2 value2...
- 获取指定键所有字段
hkeys key
- 获取一个字段值
hget key filed
- 获取多个字段值
hmget key filed1 filed2...
- 获取所有字段值
hvals key
- 获取所有字段和值
hgetall key
- 删除指定字段
hdel key field1 field2...
- 删除整个hash值
del key
# 增加一个hash键值对,字段为name,值为Luffy
127.0.0.1:6379> hset user name 'Luffy'
(integer) 1
# 增加一个hash键值对,字段为age,值为16
127.0.0.1:6379> hset user age 16
(integer) 1
# 增加多个hash键值对
127.0.0.1:6379> hmset user1 name 'Naruto' age 17
OK
# 获取user键的所有字段
127.0.0.1:6379> hkeys user
1) "name"
2) "age"
# 获取user键对应的hash的name字段值
127.0.0.1:6379> hget user name
"Luffy"
# 获取user键对应hash的name、age字段值
127.0.0.1:6379> hmget user name age
1) "Luffy"
2) "16"
# 获取user键对应hash的所有字段值
127.0.0.1:6379> hvals user
1) "Luffy"
2) "16"
# 获取user键对应hash的所有字段和值
127.0.0.1:6379> hgetall user
1) "name"
2) "Luffy"
3) "age"
4) "16"
# 删除user键对应hash的age字段
127.0.0.1:6379> hdel user age
(integer) 1
127.0.0.1:6379> hgetall user
1) "name"
2) "Luffy"
# 删除user键值对
127.0.0.1:6379> del user
(integer) 1
-
Redis 列表(List)
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
Redis list
- 列表左侧插入值
lpush key value1 value2...
- 列表右侧插入值
rpush key value1 value2...
- 在指定值前面或后面插入值
linsert key before value 插入的值
linsert key after value 插入的值
- 获取列表指定范围的值
lrange key start stop
lrange key 0 -1
获取列表所有值
索引从左侧开始,第一个值是0;
索引可以是负数,表示从尾部开始,-1表示最后一个值; - 获取列表长度
llen key
- 修改指定索引位置的值
lset key index value
- 将列表中前count次出现的值删除
lrem key count value
count > 0,从头往尾删;
count < 0,从尾往头删;
count = 0,全部删除;
# 键students添加list值 左侧
127.0.0.1:6379> lpush students 'xiaohong' 'xiaolan' 'xiaolv' 'xiaozi'
(integer) 4
# 右侧添加
127.0.0.1:6379> rpush students 'xiaohuang'
(integer) 5
# 在'xiaozi'前面插入值
127.0.0.1:6379> linsert students before 'xiaozi' 'qian'
(integer) 7
# 在'xiaozi'后面插入值
127.0.0.1:6379> linsert students after 'xiaozi' 'hou'
(integer) 8
# 获取列表下标 0-3的值
127.0.0.1:6379> lrange students 0 3
1) "zuoce"
2) "qian"
3) "xiaozi"
4) "hou"
# 获取students列表所有值
127.0.0.1:6379> lrange students 0 -1
1) "zuoce"
2) "qian"
3) "xiaozi"
4) "hou"
5) "xiaolv"
6) "xiaolan"
7) "xiaohong"
8) "xiaohuang"
# 获取列表长度
127.0.0.1:6379> llen students
(integer) 8
# 修改'xiaolv'为'xiaohei'
127.0.0.1:6379> lset students 4 'xiaohei'
OK
127.0.0.1:6379> lpush test a b c a b c a a
(integer) 8
# 删除test列表中出现的前2个c
127.0.0.1:6379> lrem test 2 c
(integer) 2
127.0.0.1:6379> lrange test 0 -1
1) "a"
2) "a"
3) "b"
4) "a"
5) "b"
6) "a"
# 删除test列表中出现的前1个b
127.0.0.1:6379> lrem test 1 b
(integer) 1
127.0.0.1:6379> lrange test 0 -1
1) "a"
2) "a"
3) "a"
4) "b"
5) "a"
# 删除test列表中所有的a
127.0.0.1:6379> lrem test 0 a
(integer) 4
127.0.0.1:6379> lrange test 0 -1
1) "b"
-
Redis 集合(Set)
Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的。
只能添加、删除,不能修改。
Redis Set
- 集合添加值
sadd key value1 value2...
- 集合元素数量
scard key
- 查询集合所有元素
smembers key
- 删除指定值
srem key value
# 集合添加元素
127.0.0.1:6379> sadd set_test 'aa' 'bb' 'cc'
(integer) 3
# 集合元素数量
127.0.0.1:6379> scard set_test
(integer) 3
# 查询set_test集合元素
127.0.0.1:6379> smembers set_test
1) "aa"
2) "cc"
3) "bb"
# 删除'bb'
127.0.0.1:6379> srem set_test bb
(integer) 1
127.0.0.1:6379> smembers set_test
1) "aa"
2) "cc"
- Redis 有序集合(sorted set)
Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
每个元素都会关联一个分数(score),分数(score)可以为负数,redis通过分数(score)来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
只能添加、删除,不能修改。
Redis zset
- zset中添加值
zadd key score1 value1 score2 value2...
- 获取zset指定范围内的值
zrange key start stop
zrange key start stop withscores
同时获取score - 通过score获取值
zrangebyscore key min max
zrangebyscore key min max withscores
min表示score开始值;max表示score结束值; - 通过值得到score
zscore key value
- 删除指定值
zrem key value1 value2...
- 删除score在指定范围内的值
zremrangebyscore key min max
# 添加元素
127.0.0.1:6379> zadd zet_test 1 aaa 3 bbb 2 ccc
(integer) 3
# 获取下标为0~1的元素
127.0.0.1:6379> zrange zet_test 0 1
1) "aaa"
2) "ccc"
# 获取zet_test集合中的所有元素
127.0.0.1:6379> zrange zet_test 0 -1
1) "aaa"
2) "ccc"
3) "bbb"
# 获取集合中元素和score
127.0.0.1:6379> zrange zet_test 0 -1 withscores
1) "aaa"
2) "1"
3) "ccc"
4) "2"
5) "bbb"
6) "3"
# 返回score在0 - 2之间的值
127.0.0.1:6379> zrangebyscore zet_test 0 2
1) "aaa"
2) "ccc"
# 返回值‘ccc’的score
127.0.0.1:6379> zscore zet_test ccc
"2"
# 删除指定值
127.0.0.1:6379> zrem zet_test eee
(integer) 1
# 删除score在1 - 3区间的值
127.0.0.1:6379> zremrangebyscore zet_test 1 3
(integer) 3
网友评论