Redis
五大类型:字符串(String
)、哈希/散列/字典(Hash
)、列表(List
)、集合(Set
)、有序集合(sorted set
)五种。
Controller:@Resource RedisTemplate<String, String> redisTemplate;
redisTemplate.opsForValue();//操作字符串
redisTemplate.boundValueOps("keyValue").set("value");//操作字符串
redisTemplate.opsForHash();//操作hash
redisTemplate.boundHashOps("keyHash").put("key","value");//操作hash
redisTemplate.opsForList();//操作list
redisTemplate.boundListOps("keyList").leftPush("value");//操作lis
redisTemplate.opsForSet();//操作set
redisTemplate.boundSetOps("keySet").add("values");//操作set
redisTemplate.opsForZSet();//操作有序set
redisTemplate.boundZSetOps("keyZSet").add("values",1.0);//操作有序set
String
编号 | 命令 | 描述说明 |
---|---|---|
1 | SET key value | 此命令设置指定键的值。 |
2 | GET key | 获取指定键的值 |
3 | GETRANGE key start end | 获取存储在键上的字符串的子字符串 |
4 | GETSET key value | 设置键的字符串值并返回其旧值 |
5 | GETBIT key offset | 返回在键处存储的字符串值中偏移处的位值 |
6 | MGET key1 [key2..] | 获取所有给定键的值 |
7 | SETBIT key offset value | 存储在键上的字符串值中设置或清除偏移处的位 |
8 | SETEX key seconds value | 使用键和到期时间来设置值 |
9 | SETNX key value | 设置键的值,仅当键不存在时 |
10 | SETRANGE key offset value | 在指定偏移处开始的键处覆盖字符串的一部分 |
11 | STRLEN key | 获取存储在键中的值的长度 |
12 | MSET key value [key value …] | 为多个键分别设置它们的值 |
13 | MSETNX key value [key value …] | 为多个键分别设置它们的值,仅当键不存在时 |
14 | PSETEX key milliseconds value | 设置键的值和到期时间(以毫秒为单位) |
15 | INCR key | 将键的整数值增加1 |
16 | INCRBY key increment | 将键的整数值按给定的数值增加 |
17 | INCRBYFLOAT key increment | 将键的浮点值按给定的数值增加 |
18 | DECR key | 将键的整数值减1 |
19 | DECRBY key decrement | 按给定数值减少键的整数值 |
20 | APPEND key value | 将指定值附加到键 |
//编号1:
redisTemplate.opsForValue().set(key,value));
//编号2:
redisTemplate.opsForValue().get(key));
//编号3:
redisTemplate.opsForValue().get(key, start, end);
//编号4:
redisTemplate.opsForValue().getAndSet(key, value);
//编号5:
redisTemplate.opsForValue().getBit(key, offset);//下方注释
//编号6:
redisTemplate.opsForValue().multiGet(keys);
//编号7:
redisTemplate.opsForValue().setBit(key, offset, value);//下方注释
//编号8、14:
redisTemplate.opsForValue().set(K key, V value, long timeout, TimeUnit unit);//TimeUnit是timeout的类型,如毫秒\秒\天等
//编号9:
redisTemplate.opsForValue().setIfAbsent(key, value);
//编号10:
redisTemplate.opsForValue().set(K key, V value, long offset);//博主此处未做java验证
//编号11:
redisTemplate.opsForValue().size(key));
//编号12:
redisTemplate.opsForValue().multiGet(Collection<K> keys);
//编号13:
redisTemplate.opsForValue().multiSetIfAbsent(Map<? extends K, ? extends V> m);
//编号15、16、17、18、19:
redisTemplate.opsForValue().increment(K key, long delta);
//或:
redisTemplate.opsForValue().increment(K key, double delta);
//编号20:
redisTemplate.opsForValue().append(key, value);//在key键对应值的右面追加值value
//删除方法
del key
redisTemplate.opsForValue().getOperations().delete(key);
Hash
Redis hash
是一个string
类型的field
(字段) 和 value
(值) 的映射表,hash
特别适合用于存储对象。
Redis
中每个hash
可以存储
2
32
?
1
2^{32} -1
232?1
键值对(40多亿)。
编号 | 命令 | 描述说明 |
---|---|---|
1 | HDEL key field2 [field2] | 删除一个或多个哈希字段 |
2 | HEXISTS key field | 判断是否存在散列字段 |
3 | HGET key field | 获取存储在指定键的哈希字段的值 |
4 | HGETALL key | 获取存储在指定键的哈希中的所有字段和值 |
5 | HINCRBY key field increment | 将哈希字段的整数值按给定数字增加 |
6 | HINCRBYFLOAT key field increment | 将哈希字段的浮点值按给定数值增加 |
7 | HKEYS key | 获取哈希中的所有字段 |
8 | HLEN key | 获取散列中的字段数量 |
9 | HMGET key field1 [field2] | 获取所有给定哈希字段的值 |
10 | HMSET key field1 value1 [field2 value2 ] | 为多个哈希字段分别设置它们的值 |
11 | HSET key field value | 设置散列字段的字符串值 |
12 | HSETNX key field value | 仅当字段不存在时,才设置散列字段的值 |
13 | HVALS key | 获取哈希中的所有值 |
//编号1:
redisTemplate.opsForHash().delete(H key, Object... hashKeys);//...表示可以传入多个map的key,用,隔开。或用数组传值
//编号2:
redisTemplate.opsForHash().hasKey(key, hashKey);
//编号3:
redisTemplate.opsForHash().get(key, hashKey);
//编号4:
redisTemplate.opsForHash().entries(key);//返回map集合
//编号5、6:
redisTemplate.opsForHash().increment(H key, HK hashKey, long delta);
//或
redisTemplate.opsForHash().increment(H key, HK hashKey, double delta);
//编号7:
redisTemplate.opsForHash().keys(key);//返回map的key集合Set
//编号8:
redisTemplate.opsForHash().size(key);
//编号9:
redisTemplate.opsForHash().multiGet(H key, Collection<HK> hashKeys);
//编号10:
redisTemplate.opsForHash().putAll(H key, Map<? extends HK, ? extends HV> m);
//编号11:
redisTemplate.opsForHash().put(key, hashKey, value);
//编号12:
redisTemplate.opsForHash().putIfAbsent(key, hashKey, value);
//编号13:
redisTemplate.opsForHash().values(key);//返回map中的value集合List;
List
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
一个列表最多可以包含
2
32
?
1
2^{32}-1
232?1
个元素 (4294967295, 每个列表超过40亿个元素)。
编号 | 命令 | 描述说明 |
---|---|---|
1 | BLPOP key1 [key2 ] timeout | 删除并获取列表中的第一个元素,或阻塞,直到有一个元素可用 |
2 | BRPOP key1 [key2 ] timeout | 删除并获取列表中的最后一个元素,或阻塞,直到有一个元素可用 |
3 | BRPOPLPUSH source destination timeout | 从列表中弹出值,将其推送到另一个列表并返回它; 或阻塞,直到一个可用 |
4 | LINDEX key index | 通过其索引从列表获取元素 |
5 | LINSERT key BEFORE/AFTER pivot value | 在列表中的另一个元素之前或之后插入元素 |
6 | LLEN key | 获取列表的长度 |
7 | LPOP key | 删除并获取列表中的第一个元素 |
8 | LPUSH key value1 [value2] | 将一个或多个值添加到列表 |
9 | LPUSHX key value | 仅当列表存在时,才向列表添加值 |
10 | LRANGE key start stop | 从列表中获取一系列元素 |
11 | LREM key count value | 从列表中删除元素 |
12 | LSET key index value | 通过索引在列表中设置元素的值 |
13 | LTRIM key start stop | 修剪列表的指定范围 |
14 | RPOP key | 删除并获取列表中的最后一个元素 |
15 | RPOPLPUSH source destination | 删除列表中的最后一个元素,将其附加到另一个列表并返回 |
16 | RPUSH key value1 [value2] | 将一个或多个值附加到列表 |
17 | RPUSHX key value | 仅当列表存在时才将值附加到列表 |
redisTemplate.opsForList().leftPush(key, value);//从左向右存压栈
redisTemplate.opsForList().leftPop(key);//从左出栈
redisTemplate.opsForList().size(key);//队/栈长
redisTemplate.opsForList().range(key, start, end);//范围检索,返回List
redisTemplate.opsForList().remove(key, i, value);//移除key中值为value的i个,返回删除的个数;如果没有这个元素则返回0
redisTemplate.opsForList().index(key, index);//检索
redisTemplate.opsForList().set(key, index, value);//赋值
redisTemplate.opsForList().trim(key, start, end);//裁剪,void,删除除了[start,end]以外的所有元素
redisTemplate.opsForList().rightPopAndLeftPush(String sourceKey, String destinationKey);//将源key的队列的右边的一个值删除,然后塞入目标key的队列的左边,返回这个值
注意:要缓存的对象必须实现Serializable
接口,因为Spring
会将对象先序列化再存入Redis
,否则报异常nested exception is java.lang.IllegalArgumentException: DefaultSerializer requires a Serializable……
Set
Redis
的Set
是String
类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
集合对象的编码可以是intset
或者hashtable
。
Redis
中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)
。
集合中最大的成员数为:
2
32
?
1
2^{32}-1
232?1
个 (4294967295, 每个集合可存储40多亿个成员)。
编号 | 命令 | 描述说明 |
---|---|---|
1 | SADD key member1 [member2] | 将一个或多个成员添加到集合 |
2 | SCARD key | 获取集合中的成员数 |
3 | SDIFF key1 [key2] | 减去多个集合 |
4 | SDIFFSTORE destination key1 [key2] | 减去多个集并将结果集存储在键中 |
5 | SINTER key1 [key2] | 相交多个集合 |
6 | SINTERSTORE destination key1 [key2] | 交叉多个集合并将结果集存储在键中 |
7 | SISMEMBER key member | 判断确定给定值是否是集合的成员 |
8 | SMOVE source destination member | 将成员从一个集合移动到另一个集合 |
9 | SPOP key | 从集合中删除并返回随机成员 |
10 | SRANDMEMBER key [count] | 从集合中获取一个或多个随机成员 |
11 | SREM key member1 [member2] | 从集合中删除一个或多个成员 |
12 | SUNION key1 [key2] | 添加多个集合 |
13 | SUNIONSTORE destination key1 [key2] | 添加多个集并将结果集存储在键中 |
14 | SSCAN key cursor [MATCH pattern] [COUNT count] | 递增地迭代集合中的元素 |
redisTemplate.opsForValue().getAndSet(key, value)