Redis
Spring 集成 Reids(Spring-data-redis)
Redis 键值基本操作
key 操作
从终端对 Redis 进行基本的键值操作如下:
assad@DESKTOP-assad:/etc/redis$ redis-cli # 登陆 Redis 终端
127.0.0.1:6379> set 1 assad # 添加键值 key-value
OK
127.0.0.1:6379> get 1 # 获取键值
"assad"
127.0.0.1:6379> del 1 # 删除键值
(integer) 1
redis 的 key 是以 string 储存的,redis 对于
key
常用的操作指令如下:
select db_name | 使用指定数据库 select 1 # 使用数据库 1 |
exits key_name | 检查指定的 key 是否存在 |
get key_name | 获取指定 key 的 value |
mget key1 [key2 ..] | 获取指定多个 key 的 value, mget 1 2 3 # 获取key="1",key="2",key="3" 的 value |
randomkey | 随机获取一个 key |
set key_name key_value | 设置 key-value |
getset key_name key_value | 设置 key-value,并返回 key 的旧值 |
setnx key_name value | 只有在 key 不存在时,才设置 key |
mset key1 val1[ key1 val2...] | 同时设置多个 key-value mset 1 "assad" 2 "Vancy" |
del key_name | 删除指定的 key |
rename key_name new_key_name | 重命名指定key |
type key_name | 返回指定 key 的 value 的类型 |
dump key_name | 序列化指定 key,并返回该 key 序列化后的 value |
keys pattern | 查找所有符合给定 pattern 的 key,支持使用 * 作为通配符; keys a* # 查找所有以 ‘a’ 开头的 key keys * # 查找所有 key |
move key_name db_name | 将指定 key-value 移动到指定数据库 move assad 1 # 将 key="assad" 的 key-value 移动到数据库库 1 |
expire key_name seconds pexpire key_name milliseconds | 给指定 key 设置过期时间,单位分别为 秒,毫秒 |
expireat key_name timestamp | 设置指定的 key 在指定的 UNIX 时间戳过期 |
ttl key_name pttl key_name | 返回 key 的 TTL(Time to Live)生存时间,分别以 秒,毫秒 为单位; |
persist key_name | 移除指定 key 的过期时间,该 key 将持久保存 |
flushdb | 删除当前数据库的所有 key |
flushall | 删除所有数据库的 key |
Redis 的 value 支持 String(字符串),Hash(哈希),List(列表),Set(集合)这些数据类型,这个也是 Redis 区别其他缓存中间件的一大优势,即支持丰富的数据类型;
String 操作
在 Redis 储存的 value 中,string、char、integer、float、boolean 这些类型都是以 String 的方式存储的;
getrange key_name start end | 获取 key 中字符串的子串, getrange assad 0 5 # 获取 key="assad" 的 value 的 [0,5) 子串; |
strlen key_name | 获取 key 中字符串的长度 |
append key_value | 如果 key 已经存在并且是一个字符串,将 value 追加到 key 原来的值的末尾 |
incr key_name | 将 key 中储存的数字值 +1 |
decr key_name | 将 key 中储存的数字值 -1 |
incrby key_name increment | 将 key 中储存的数字值增加某个整数值 |
decrby key_name decrement | 将 key 中储存的数字值减少某个整数值 |
incrbyfloat key_name increment | 将 key 中储存的数字值增加某个浮点数值 |
decrbyfloat key_name decrement | 将 key 中储存的数字值减少某个浮点数值 |
Hash 操作
hash 是一个 string 操作的 field-value 映射表,特别适合用于储存对象;
127.0.0.1:6379> hmset assad name "assad" age 20 city "Guangzhou" # 添加一个 hash
OK
127.0.0.1:6379> hgetall assad # 获取一个 hash 的所有属性
1) "name"
2) "assad"
3) "age"
4) "20"
5) "city"
6) "Guangzhou"
hmset key_name[ field value.. ] | 设置一个 hash 值的 key |
hgetall key_name | 获取 hash 的所有字段和值 |
hkeys key_name | 获取 hash 的所有字段 |
hvals key_name | 获取 hash 的所有值 |
hget key_name field hmget key_name [ field1 field2 ..] | 获取 hash 指定字段的值 |
hset key fileld value hmset key [field1 value1 field2 value2] | 设置 hash 指定字段的值 |
对 hash 中数字,字符串的操作指令同 Redis 对于支付串的操作指令,不过在指令前加上 h,如:
hincr key_name field, hdecr key_name field,hgetrange key_name start end
List 操作
Redis 的 List 是 string 的有序集合,Redis 的每一个 List 最多可以包含 2^32 -1 个元素(即一个 List 的索引由 4 个字节储存);
127.0.0.1:6379> Lpush users assad # 向列表添加元素
(integer) 1
127.0.0.1:6379> lpush users vancy
(integer) 2
127.0.0.1:6379> lpush users tim
(integer) 3
127.0.0.1:6379> lrange users 0 10 # 获取列表索引值为 0-10 的值
1) "tim"
2) "vancy"
3) "assad"
llen key_name | 获取 list 长度 |
lindex key_name index | 获取 list 指定索引值的 value |
lset key_name index value | 设置 list 指定索引值的 value |
lrange key_name start stop | 获取 list 指定范围 [start, stop) 的元素,stop 设置为 -1 可以获取 list 的所有元素 |
lpop key_name blpop key_name timeout | 获取并移除 list 的最开始一个元素; 同上,不过如果 list 没有元素,会阻塞 list 直到发现可以弹出元素(或超时) |
rpop key_name brpop key_name timeout | 获取并移除 list 的最后一个元素; 同上,不过如果 list 没有元素,会阻塞 list 直到发现可以弹出元素(或超时) |
lpush key_name val1 [ val2 val3 ...] rpush key_name val1 [ val2 val3 ...] | 将一个或多个值插入 list 的头部/尾部 |
lpushx key_name val1 [ val2 val3 ...] rpushx key_name val1 [ val2 val3 ...] | 同上,但是该 list 必须是已经存在的,否则不操作 |
linsert key_name before|after exist_val new_val | 在 list 的 exist_value 值前/后插入 new_value linsert users after "assad" "vancy" # 在 users 列表的 "assad" 后插入 "vancy" |
ltrim key_name start stop | 裁剪 list ,只保留 [start,stop) 区间的元素 |
Set 操作
Redis的Set是string类型的无序集合(不可重复元素),同样集合中的最大成员数为 2^32 -1,Redis 的集合是通过哈希表实现的,所有增加、删除、查找的时间复杂度都为 O(1);
127.0.0.1:6379> sadd citys "guangzhou" "beijing" "shanghai" # 添加一个 set
(integer) 3
127.0.0.1:6379> smembers citys # 获取 set 成员
1) "shanghai"
2) "beijing"
3) "guangzhou"
sadd key member1 [ member2... ] | 向 set 添加成员 |
scard key | 获取 set 的成员数 |
smembers key | 获取 set 的所有成员 |
sismembers key member | 判断 member 是否是 set 的成员 |
srandmember key [count] | 返回 set 的 count 个随机元素 |
spop key | 移除并返回 set 的一个元素 |
srem key member1 [ member2... ] | 移除 set 的指定元素 |
sscan key cursor [match pattern] [count count_num] | 以指定条件(匹配模式,迭代数量)迭代 set,获取迭代列表 sccan myset 0 a* 20 # 获取 myset 中匹配 "a*" 的迭代列表中前20个元素 |
smove src_set dest_set member | 将 member 元素从 src_set 集合移动到 dest_set |
sdiff set1 [ set2... ] sdiffstore dest_set set1 [ set2... ] | 返回指定的 set 的差集; 同上,并储存在 dest_set 中 |
sinter set1 [ set2... ] sinterstore dest_set set1 [ set2... ] | 返回指定 set 的交集 |
sunion set1 [ set2... ] sunionstore dest_set set1 [ set2... ] | 返回指定 set 的并集 |
Stored Set 操作
stored set 有序集合也是 string 类型元素的不可重复合集,不过每一个元素都会关联一个 double 类型的 score,redis 通过该 score 对 set 中的成员进行排序(从小到大);
有序成员不可以重复,但是 score 可以重复;
127.0.0.1:6379> zadd students 1 assad 2 vancy 3 alex
(integer) 3
127.0.0.1:6379> zrange students 0 -1
1) "assad"
2) "vancy"
3) "alex"
zadd key member1 score1[member2 score2..] | 向有序集合添加成员 |
zcard key | 获取有序集合的成员数 |
zrange key start stop [withscore] zrevrange key start stop [withscore] | 通过索引区间获取有序集合成员(score从低到高); 同上,不过 score 从高到低; |
zrank key member zreverscore key member | 获取有序集合中指定成员的索引(正序); 同上,不过索引为倒序排列; |
zcount key min max | 计算有序集合 socre 在 min, max 之间的成员数 |
zscore key member | 获取有序集合指定成员的 score |
zerm key member1 [ member2... ] | 移除有序集合指定的成员 |
zermrangebyrank key start stop | 移除有序集合中给定排名区间的成员 |
zermrangebysocre key min max | 移除有序集合中给定 socre 区间的成员 |