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