docker 命令
docker run -d -p 6379:6379 --name myredis redis:latest
通过redis-cli或者redis client连接redis,视图化工具有RedisDesktopManager
redis-cli
-
连接本地
docker exec -it [ContainerID] redis-cli
-
连接远程
docker exec -it [ContainerID] redis-cli -h [Ip Address] -p [Port] -a [Password] //如果有密码 使用 -a参数
redis 存值方式为key/value方式,支持的数据类型为string、list、set、hashmap、sortedSet(有序的set)
字符串操作
-
赋值-----set key value
set name tom
-
取值-----get key
get name
-
先取值后赋值------getset key value
getset name jack "tom"
-
删除----del key
del name (integer)1
-
自增----incr key(key对应的value必须是数值类型的字符,若未设置初始值,则从0开始)
-
自减----decr key(key对应的value必须是数值类型的字符,若未设置初始值,则从0开始)
-
扩展命令
-
incrby----递增设定的数值(key对应的value必须是数值类型的字符,若未设置初始值,则从0开始)
-
decrby-----递减设定的数值(key对应的value必须是数值类型的字符,若未设置初始值,则从0开始)
-
append key value----拼接字符串,其中integer的值为字符串的长度,若key不存在时,会自动创建一个字符串并终值value
-
哈希操作
hash类型是存储String key和String value的map容器,适合用于存储对象
-
赋值
-
hset hashkey String key String value(单个设置)
hset person name tom
-
hmset hashkey {String key1 String value1,String key2 String value2…}
hmset people name jack age 23 gender male
-
-
取值
-
hget hashkey String key(获取单个键对应的值)
hget person name
-
hmget hashkey String key1 String key2…(这个表示可以获取多个键所对应的值)
hmget people name age gender
-
hgetall hashkey(获取所有key和value)
hgetall people
-
-
删除
-
hdel hashkey String key1 String key2…(表示删除多个键所对应的值)
还可以删除不存在的字段,但是结果会显示为0
hdel person name
-
del hashkey表示删除这个map
del person
-
-
递增对应的值
hincrby hashkey String key num
-
判断对应的myhash是否存在,若存在返回1,不存在返回0
hexists hashkey String key
-
判断对应myhash的长度,返回长度
hlen hashkey
-
获得所有的key
hkeys hashkey
-
获取所有的value
hvals hashkey
列表操作
经常用于消息队列的服务,完成多个服务之间的交互
-
添加元素到列表的左边
lpush listkey value1 value2 …(返回值为列表的长度)
-
添加元素到列表的右边
rpush listkey value1 value2 …(返回值为列表的长度)
-
查看list集合
lrange listName start end(可正可负,若为负则是从右边开始算,-1则表示最后一个,0到end和0到-1一样,都是闭区间)
-
弹出操作
-
头部弹出
lpop key(会弹出左边第一个值,若有值,则弹出并会显示弹出的值,若没有,则返回null)
-
尾部弹出
rpop key(会弹出右边第一个值,若有值,则弹出并会显示弹出的值,若没有,则返回null)
-
-
获取列表中元素的个数-----llen key(会返回列表的长度)
-
当list中的key存在时才会插入一个值并返回当前列表的长度,若不存在则不会插入并返回0
- 从左边插入-----lpushx key value
- 从右边插入-----rpushx key value
-
删除操作----lrem key count value(会删除count个值为value的元素。count大于0的时候,表示从头开始删除count个值为value的元素。若count小于0,则表示从后边往前遍历并删除count个值为value的元素。若count等于0.则表示删除链表中所有值为value的元素)
-
在指定的位置插入元素----lset key location value(location从0开始)
-
在某个元素之后插入值----linsert key after 目标元素 插入元素
-
将第一个链表中的尾部弹出并压入到第二个链表的头部----rpoplpush key1 key2
Set集合操作
元素不能重复
-
添加元素----sadd key value1 value2…
-
查看数据----smembers key
-
判断指定元素是否包含在set里面----sismember key value,若返回1则表示存在,若返回0表示不存在
-
差集运算----sdiff key1 key2…
-
交集运算----sinter key1 key2…
-
并集运算----sunion key1 key2…
-
获得集合中具体的数量----scard key
-
随机获得set集合中的一个元素----srandmember key
-
将两个集合相差的元素存储在另一个集合中----sdiffstore newkey key1 key2
-
将两个集合的交集存储在另一个集合中-----sinterstore newkey key1 key2
-
将两个集合的并集存储在另一个集合中----sunionstore newkey key1 key2
Sorted-Set集合操作
元素不能重复,但分数(score)可以重复
- 添加元素----zadd key score1 value1 score2 value2…
- 获得分数----zcore key value
- 获得具体成员的数量----zcard key
- 删除操作----zrem key value1 value2…
- 查找范围内的值-----zrange key num1 num2(这是从大到小排序的)
- 查找范围内的值并和分数一起显示出来------zrange key num1 num2 withscores(这是从大到小排序的)
Keys的通用操作
-
显示所有的key----keys *
-
查询key的模糊查询----keys string?
keys nu? 只查询一位,如num keys nu* 匹配已nu开头的所有key
-
删除指定的key----del key1 key2 key3…
-
判断key是否存在,若存在返回1,不存在返回0----exists key
-
设置键的过期时间----expire key seconds
-
获得key剩下的超时时间,若设置了会返回相应的值,所没有设置则会返回-1----ttl key
-
查看键的类型----type key
多数据库操作
用户可以自己选择连接相应的数据库,一共有16个,下标从0-15,默认连接第一个,即0。
- 选择连接相应的数据库----select i
- 将一个数据库中的key移到另外的地方----move key i (数据库的下标)
事务
- 开启事务----multi
- 提交事务----exec
- 回滚事务----discard
Redis Java Client
-
存入对象
异常信息:java.lang.IllegalArgumentException:DefaultSerializerrequires aSerializablepayload but received anobjectof type 原因:必须实现序列化,因为需要将对象序列化后存储到 Redis。如果没实现 Serializable ,会引出异常; 解决:如果不是用默认的序列化,需要自定义序列化实现,只要实现 RedisSerializer 接口去实现即可,然后在使用 RedisTemplate.setValueSerializer 方法去设置你实现的序列化实现。支持 JSON、XML 等。