Redis(2)基本键值操作

Redis

Redis(1)安装 & 配置

Redis(2)基本键值操作

Redis(3)常用维护操作

Redis(4)客户端连接:Java

Spring 集成 Reids(Spring-data-redis)




Redis 键值基本操作


以下只介绍 Redis 常用的键值操作指令,完整指令参见: http://www.redis.cn/commands.html

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 区间的成员





你可能感兴趣的:(Redis)