安装与客户端的使用:https://blog.csdn.net/qq_35038153/article/details/79675728
其他参考链接:https://www.jianshu.com/p/7bf5dc61ca06/
https://blog.csdn.net/w501631338/article/details/73555908
Redis五大类型:字符串(String)、哈希/散列/字典(Hash)、列表(List)、集合(Set)、有序集合(sorted set)
| 结构类型 | 结构存储的值 | 结构的读写能力 | 
|---|---|---|
| String | 可以是字符串、整数或者浮点数 | 对整个字符串或者字符串的其中一部分执行操作;对象和浮点数执行自增(increment)或者自减(decrement) | 
| List | 一个链表,链表上的每个节点都包含了一个字符串 | 从链表的两端推入或者弹出元素;根据偏移量对链表进行修剪(trim);读取单个或者多个元素;根据值来查找或者移除元素 | 
| Set | 包含字符串的无序收集器(unorderedcollection),并且被包含的每个字符串都是独一无二的、各不相同 | 添加、获取、移除单个元素;检查一个元素是否存在于某个集合中;计算交集、并集、差集;从集合里卖弄随机获取元素 | 
| Hash | 包含键值对的无序散列表 | 添加、获取、移除单个键值对;获取所有键值对 | 
| Zset(有序的Set) | 字符串成员(member)与浮点数分值(score)之间的有序映射,元素的排列顺序由分值的大小决定 | 添加、获取、删除单个元素;根据分值范围(range)或者成员来获取元素 | 
其中String和Hash用的较多。redis api命令
Spring 封装了RedisTemplate来进行对redis的各种操作,支持所有redis原生的api
redisTemplate
Controller:@Resource RedisTemplate<String, String> redisTemplate;
1  | redisTemplate.opsForValue();//操作字符串  | 
注意:如果使用RedisTemplate需要更改序列化方式
1  | RedisSerializer<String> stringSerializer = new StringRedisSerializer();  | 
StringRedisTemplate(Redis的String数据结构)
StringRedisTemplate(推荐使用)与RedisTemplate的区别:
StringRedisTemplate继承RedisTemplate
两者数据不可通,可以看做两种数据类型
SDR默认采用的序列化策略有两种,一种是String的序列化策略,一种是JDK的序列化策略。
StringRedisTemplate默认采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的。
RedisTemplate默认采用的是JDK的序列化策略,保存的key和value都是采用此策略序列化保存的。
String
1  | String:  | 
- 8.redisTemplate.opsForValue().set(K key, V value, long timeout, TimeUnit unit);
 
1  | 使用:redisTemplate.opsForValue().set("name","tom",10, TimeUnit.SECONDS);  | 
- 9.redisTemplate.opsForValue().setIfAbsent(key, value);
 
1  | 使用:System.out.println(redisTemplate.opsForValue().setIfAbsent("multi1","multi1"));//false multi1之前已经存在  | 
10.redisTemplate.opsForValue().set(K key, V value, long offset);
该方法是用 value 参数覆写(overwrite)给定 key 所储存的字符串值,从偏移量 offset 开始
1  | 使用:redisTemplate.opsForValue().set("key","hello world");  | 
- 6.redisTemplate.opsForValue().multiGet(keys);
 - 12.redisTemplate.opsForValue().multiGet(Collection
keys);  
1  | 使用:Map<String,String> maps = new HashMap<String, String>();  | 
redisTemplate.opsForValue().increment(K key, long delta)
redisTemplate.opsForValue().increment(K key, double delta)
原子递增
1  | redisTemplate.opsForValue().increment(key,1) //1  | 
| 编号 | 命令 | 描述说明 | 
|---|---|---|
| 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 | 将指定值附加到键 | 
Hash
1  | Hash:  | 
| 序号 | 命令 | 说明 | 
|---|---|---|
| 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 | 获取哈希中的所有值 | 
List
1  | List:  | 
| 序号 | 命令 | 说明 | 
|---|---|---|
| 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 | 仅当列表存在时才将值附加到列表 | 
Set
1  | Set:  | 
| 序号 | 命令 | 说明 | 
|---|---|---|
| 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] | 递增地迭代集合中的元素 | 
String…与String[]的区别
类型后面三个点(String…),是从Java 5开始,Java语言对方法参数支持一种新写法,叫可变长度参数列表,其语法就是类型后跟 …,表示此处接受的参数为0到多个Object类型的对象,或者是一个Object[]。所以如果你有了xxx(String… strs)就不能再有xxx(String[]),三个点的写法包含了第二种。
2018/12/11更新
spring-data-redis
 上面介绍了StingRedisTemplate的一些基本方法,上周末喜提一个新的项目,(^▽^) 项目比之前的大,功能很多,而且创始者还不爱打注释!这真的让我非常头疼
 好了回归主题,我看到代码里有一段
1  | 
  | 
 看到StringRedisTemplate有些熟悉,刚入职的时候学了,是Redis的String数据结构,boundHashOps()没见过啊,这其实是一个RedisTemplate的方法,而StringRedisTemplate继承自它,所以告诉我他与get()的区别?
 好像只是为了简化opsForValue()一步,好吧似乎真的只是这样而已,spring-data-redis提供了对key的“bound”便捷化API,为啥要用bound这个名字呢emmm… 可以通过bound封装指定的key操作redis里的数据,有
BoundValueOperations
BoundSetOperations
BoundListOperations
BoundSetOperations
BoundHashOperations
注意,这个spring-data-redis和put普通的spring-redis有一小点区别,jar包名字的区别…s一个叫spring-boot-data-redis,一个叫spring-boot-start-redis,都是基于Jedis的,所以其实没区别。