Redis操作
一、key键操作
(一)设置key-value
[root@localhost admin]# /usr/local/bin/redis-server /etc/redis.conf
[root@localhost admin]# /usr/local/bin/redis-cli
127.0.0.1:6379> set key1 value1
OK
127.0.0.1:6379> set key2 value2
OK
127.0.0.1:6379> set key3 value3
OK
127.0.0.1:6379>
(二)查询key
- 查询所有
127.0.0.1:6379> keys *
1) "key3"
2) "key1"
3) "key2"
- 查询单个
127.0.0.1:6379> exists k1
(integer) 0
127.0.0.1:6379> exists key1
(integer) 1
- 查询类型
127.0.0.1:6379> type key1
string
- 删除
- del 立即删除
- unlink 异步删除
127.0.0.1:6379> del key3
(integer) 1
127.0.0.1:6379> unlink key2
(integer) 1
127.0.0.1:6379> keys *
1) "key1"
- 设置过期时间,单位s
- -2表示过期
- -1表示永不过期
127.0.0.1:6379> expire key3 15
(integer) 1
127.0.0.1:6379> ttl key3
(integer) 9
127.0.0.1:6379> ttl key3
(integer) -2
127.0.0.1:6379> ttl key2
(integer) -1
- 查询key的个数
- dbsize
127.0.0.1:6379> keys *
1) "key1"
2) "key2"
127.0.0.1:6379> dbsize
(integer) 2
- 切换数据库
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]>
- 清空当前库
127.0.0.1:6379> flushdb
OK
- 清空所有库
127.0.0.1:6379> flushall
OK
二、字符串
- 设置值
127.0.0.1:6379> set key1 value1
OK
- 取值
127.0.0.1:6379> get key1
"value1"
- 追加值
127.0.0.1:6379> append key1 value001
(integer) 14
127.0.0.1:6379> get key1
"value1value001"
- 值长度
127.0.0.1:6379> strlen key1
(integer) 14
- 不覆盖设置值
127.0.0.1:6379> setnx key1 123
(integer) 0
127.0.0.1:6379> setnx key4 value4
(integer) 1
- 加减值
127.0.0.1:6379> setnx key5 500
(integer) 1
127.0.0.1:6379> incr key5
(integer) 501
127.0.0.1:6379> decr key5
(integer) 500
127.0.0.1:6379> incrby key5 10
(integer) 510
127.0.0.1:6379> decrby key5 20
(integer) 490
- 多个赋值
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3
OK
- 多个取值
127.0.0.1:6379> mget k1 k2 k3
1) "v1"
2) "v2"
3) "v3"
- 多个不覆盖设置值
127.0.0.1:6379> msetnx k1 v1 k2 v2 k3 v3
(integer) 0
127.0.0.1:6379> msetnx k11 v11 k22 v22 k33 v33
(integer) 1
- 字符串截取
127.0.0.1:6379> setrange key offset value
127.0.0.1:6379> getrange key start end
- 设值时设置过期时间
127.0.0.1:6379> setex key seconds value
- 获取并替换值
127.0.0.1:6379> getset key value
三、链表
- 头部添加lpush
127.0.0.1:6379> lpush k1 v1 v2 v3
(integer) 3
127.0.0.1:6379> lrange k1 0 5
1) "v3"
2) "v2"
3) "v1"
127.0.0.1:6379> lrange k1 0 -1
1) "v3"
2) "v2"
3) "v1"
- 尾部添加rpush
127.0.0.1:6379> rpush k2 v1 v2 v3
(integer) 3
127.0.0.1:6379> lrange k2 0 -1
1) "v1"
2) "v2"
3) "v3"
- 头部取值lpop
- 尾部取值rpop
127.0.0.1:6379> lrange k1 0 -1
1) "v3"
2) "v2"
3) "v1"
127.0.0.1:6379> lpop k1
"v3"
127.0.0.1:6379> rpop k1
"v1"
127.0.0.1:6379> lrange k1 0 -1
1) "v2"
- rpoplpush
- key1尾部取值加入key2头部
127.0.0.1:6379> rpoplpush k1 k2
"v2"
127.0.0.1:6379> lrange k2 0 -1
1) "v2"
2) "v1"
3) "v2"
4) "v3"
- 获取长度llen
127.0.0.1:6379> llen k2
(integer) 4
- linsert key BEFORE|AFTER pivot element
- 链表的第一个指定值前/后插入一个值
127.0.0.1:6379> linsert k2 before "v2" "v22"
(integer) 5
127.0.0.1:6379> lrange k2 0 -1
1) "v22"
2) "v2"
3) "v1"
4) "v2"
5) "v3"
- lrem key count element
- 删除key的n个指定元素
127.0.0.1:6379> lrem k2 2 "v2"
(integer) 2
127.0.0.1:6379> lrange k2 0 -1
1) "v22"
2) "v1"
3) "v3"
- lset key index element
- 替换索引为n的值为指定值
127.0.0.1:6379> lset k2 0 "v2"
OK
127.0.0.1:6379> lrange k2 0 -1
1) "v2"
2) "v1"
3) "v3"
四、Set集合
- sadd key member [member …]
- 设置集合的值
127.0.0.1:6379> sadd k1 v1 v2 v3
(integer) 3
- smembers k1
- 查看集合的值
127.0.0.1:6379> smembers k1
1) "v3"
2) "v1"
3) "v2"
- sismember key member
- 查看集合是否存在某值
127.0.0.1:6379> sismember k1 v1
(integer) 1
127.0.0.1:6379> sismember k1 v4
(integer) 0
- scard key
- 查看集合长度
127.0.0.1:6379> scard k1
(integer) 3
- srem key member [member …]
- 移除集合指定值
127.0.0.1:6379> srem k1 v3
(integer) 1
- spop key [count]
- 随即吐出一个值
127.0.0.1:6379> spop k1
"v1"
127.0.0.1:6379> spop k1
"v2"
127.0.0.1:6379> spop k1
(nil)
- srandmember key [count]
- 随即取出n个值
127.0.0.1:6379> srandmember k1 2
1) "v3"
2) "v1"
127.0.0.1:6379> srandmember k1 2
1) "v1"
2) "v2"
- smove source destination member
- 将集合中的一个值移动到另一个集合
- v3存在于k1,k2,集合中的值唯一
127.0.0.1:6379> sadd k2 v3 v4 v5
(integer) 3
127.0.0.1:6379> smove k1 k2 v3
(integer) 1
127.0.0.1:6379> smembers k2
1) "v5"
2) "v3"
3) "v4"
- sinter key [key …]
- 取交集
127.0.0.1:6379> sinter k1 k2
1) "v3"
- sunion key [key …]
- 取并集
127.0.0.1:6379> sunion k1 k2
1) "v1"
2) "v2"
3) "v3"
4) "v5"
5) "v4"
- sdiff key [key …]
- 取差集,存在于第一个key,不存在于第二个key集合
127.0.0.1:6379> sdiff k1 k2
1) "v1"
2) "v2"
127.0.0.1:6379> sdiff k2 k1
1) "v5"
2) "v4"
五、哈希
- hset key field value [field value …]
- 添加数据
127.0.0.1:6379> hset user id 1
(integer) 1
127.0.0.1:6379> hset user name jack
- hget key field
- 获取数据
127.0.0.1:6379> hget user id
"1"
- hmset key field value [field value …]
- 添加多个数据
- hmget key field [field …]
- 获取多个数据
127.0.0.1:6379> hmset user sex male age 30
OK
127.0.0.1:6379> hmget user id name sex age
1) "1"
2) "jack"
3) "male"
4) "30"
- hexists key field
127.0.0.1:6379> hexists user id
(integer) 1
- hkeys key
127.0.0.1:6379> hkeys user
1) "id"
2) "name"
3) "sex"
4) "age"
- hvals key
127.0.0.1:6379> hvals user
1) "1"
2) "jack"
3) "male"
4) "30"
- hincrby key field increment
127.0.0.1:6379> hincrby user age 6
(integer) 36
127.0.0.1:6379> hvals user
1) "1"
2) "jack"
3) "male"
4) "36"
- hsetnx key field value
127.0.0.1:6379> hsetnx user age 20
(integer) 0
Zset
- zadd key [NX|XX] [GT|LT] [CH] [INCR] score member [score member …]
- 添加数据
127.0.0.1:6379> zadd rank 200 java 300 javascript 400 php 500 golang
(integer) 4
- zrange key min max [BYSCORE|BYLEX] [REV] [LIMIT offset count] [WITHSCORES]
- 查询所有数据
127.0.0.1:6379> zrange rank 0 -1
1) "java"
2) "javascript"
3) "php"
4) "golang"
127.0.0.1:6379> zrange rank 0 -1 withscores
1) "java"
2) "200"
3) "javascript"
4) "300"
5) "php"
6) "400"
7) "golang"
8) "500"
- zrangebyscore key min max [WITHSCORES] [LIMIT offset count]
- 查询指定范围数据
127.0.0.1:6379> zrangebyscore rank 300 500
1) "javascript"
2) "php"
3) "golang"
127.0.0.1:6379> zrangebyscore rank 300 500 withscores
1) "javascript"
2) "300"
3) "php"
4) "400"
5) "golang"
6) "500"
- z+rev+range
- 从大到小排序查询
127.0.0.1:6379> ZREVRANGE rank 0 -1 withscores
1) "golang"
2) "500"
3) "php"
4) "400"
5) "javascript"
6) "300"
7) "java"
8) "200"
- zincrby key increment member
- 指定元素增加
127.0.0.1:6379> zincrby rank 150 java
"350"
127.0.0.1:6379> ZREVRANGE rank 0 -1 withscores
1) "golang"
2) "500"
3) "php"
4) "400"
5) "java"
6) "350"
7) "javascript"
8) "300"
- zrem key member [member …]
- 删除
- zcount key min max
- 查询指定范围内元素个数
- zrank key member
- 查询指定元素排名
127.0.0.1:6379> zrank rank java
(integer) 1
127.0.0.1:6379> zrevrank rank java
(integer) 2
六、Bitmaps
- Bitmaps本质是个字符串,但是可以进行位操作
- 8为代表一个字符
- setbit key offset value
- 设置指定偏移量的值,0/1
127.0.0.1:6379> setbit users 1 1
(integer) 0
127.0.0.1:6379> setbit users 3 1
(integer) 0
127.0.0.1:6379> setbit users 5 1
(integer) 0
127.0.0.1:6379> setbit users 7 1
(integer) 0
127.0.0.1:6379> setbit users 9 1
(integer) 0
- getbit key offset
- 获取指定偏移量的值
127.0.0.1:6379> getbit users 9
(integer) 1
- bitcount key [start end]
- 获取key中1的数量
- [start end]中代表一个字节所占的8位,而不是1位
- -1表示最后1位
127.0.0.1:6379> bitcount users 0 0
(integer) 4
127.0.0.1:6379> bitcount users 0 1
(integer) 5
127.0.0.1:6379> bitcount users 0 -1
(integer) 7
- bitop operation destkey key [key …]
- 对一个或多个保存二进制位的字符串 key 进行位元操作,并将结果保存到 destkey 上。
operation 可以是 AND 、 OR 、 NOT 、 XOR 这四种操作中的任意一种:
BITOP AND destkey key [key …] ,对一个或多个 key 求逻辑并,并将结果保存到 destkey 。
BITOP OR destkey key [key …] ,对一个或多个 key 求逻辑或,并将结果保存到 destkey 。
BITOP XOR destkey key [key …] ,对一个或多个 key 求逻辑异或,并将结果保存到 destkey 。
BITOP NOT destkey key ,对给定 key 求逻辑非,并将结果保存到 destkey 。
redis> SETBIT bits-1 0 1 # bits-1 = 1001
(integer) 0
redis> SETBIT bits-1 3 1
(integer) 0
redis> SETBIT bits-2 0 1 # bits-2 = 1011
(integer) 0
redis> SETBIT bits-2 1 1
(integer) 0
redis> SETBIT bits-2 3 1
(integer) 0
redis> BITOP AND and-result bits-1 bits-2
(integer) 1
redis> GETBIT and-result 0 # and-result = 1001
(integer) 1
redis> GETBIT and-result 1
(integer) 0
redis> GETBIT and-result 2
(integer) 0
redis> GETBIT and-result 3
(integer) 1
七、HyperLogLog
- pfadd key element [element …]
- 添加元素,自动去重
127.0.0.1:6379> pfadd id 1
(integer) 1
127.0.0.1:6379> pfadd id 2
(integer) 1
127.0.0.1:6379> pfadd id 3
(integer) 1
127.0.0.1:6379> pfadd id 1
(integer) 0
- PFCOUNT key [key …]
- 查看基数数量
127.0.0.1:6379> PFCOUNT id
(integer) 3
- PFMERGE destkey sourcekey [sourcekey …]
- 合并
127.0.0.1:6379> pfadd num 4 5
(integer) 1
127.0.0.1:6379> PFMERGE merge id num
OK
127.0.0.1:6379> PFCOUNT merge
(integer) 5
八、Geospatial
-
geoadd key [NX|XX] [CH] longitude latitude member [longitude latitude member …]
-
添加坐标
GEOADD city 111.00 28.00 bj
(integer) 1
- geopos key member [member …]
- 获取坐标
127.0.0.1:6379> GEOPOS city bj
1) 1) "110.99999874830245972"
2) "27.99999879696989069"
-
geodist key member1 member2 [m|km|ft|mi]
-
获取两点间距离
127.0.0.1:6379> GEOADD city 128.00 32.00 sh
(integer) 1
127.0.0.1:6379> GEODIST city bj sh
"1694783.0049"
- GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count [ANY]] [ASC|DESC] [STORE key] [STORE
- 获取以某点为圆心,半径xxx中是否存在坐标点
127.0.0.1:6379> GEORADIUS city 120 30 500 km
(empty array)
127.0.0.1:6379> GEORADIUS city 120 30 1000 km
1) "sh"
2) "bj"