开启redis客户端
//方式1
redis-cli
auth 密码
//方式2
redis-cli -a 密码
查看客户端是否开启
ping
//若会有是pong,则是开启的
//不是则否
关闭redis客户端
//方式1
exit
//方式2
puit
//方式3
ctrl+c
选择数据库
select 数字
// 例,选择1号数据库
select 1
String类型
设置键值对
set key value
//例 password:123456
set password 123456
获取值
get key
//例 获取到password的值
get password
在原先的值后面追加值
append key 追加的值
//例
append password 789//返回的是password追加后的长度
//password的值就从123456-->123456789
获取值的长度
strlen key
//例
strlen password
//返回9
键不存在时赋值,键存在时不赋值
setnx key 值
//例
setnx password 12
//返回0,代表不赋值,因为password已经存在了
查看当前数据库所有的键(key)
keys *
判断当前数据库是否有某一个键(key)
exists key
//例
exists password
//返回1代表true
//返回0代表folas
查看某个key的类型
type key
//例,查看password的类型
type password
删除某个键,当然key对应的值也被删除了
del key
//例
del password
为已经存在的键值对设置过期时间
expire key 秒
//例,给password这个键值对设置10秒的过期时间
expire password 10
//一定是已经存在的键值对
查看某个键值对当前离过期还剩多少时间
ttl key
//例
ttl password
//返回-1,代表永不过期
//返回-2,代表已经过期,过期了在数据库中就再也查询不到了
查看当前数据库key的数量
dbsize
清空当前数据库
flushdb
屠杀全部的数据库(慎用)
flushall
将存储的数字值+1
incr key
//只能对数字值操作
//如果为null,新增值为1
将存储的数字值-1
decr key
//只能对数字值操作
//如果为null,新增值为-1
将存储的数字值+Number || -Number
incrby 数值
decrby 数值
//加上数值
//减去数值
//只能对数字值操作
同时设置多个键值对
mset k1 v1 k2 v2
//设置了两个键值对
同时获取多个键值对
mget k1 k2
//同时获取两个键值对
当所有的key都不存在时,设置多个键值对
msetnx k1 v1 k2 v2
//设置了两个键值对
截取值的范围(在位置上的截取)
getrange key 起始位置 截止位置
//例password:1234
getrange password 02
//password的值就变成了123
将值的某个范围赋上一个值
setrang key 起始位置 value
//例password:1234
set password 2 abc
//password的值就变成了12abc
设置键值对的同时设置过期的时间
setex key 过期时间 value
//例
setex password 30 123
//password:123,30秒后过期
给已经存在的key赋新值的同时,获取原来的值
getset key 新值
//例password:1234
getset password 456
//返回1234
list类型:有序,可重复
-1可以表示list最后一个元素的索引
从左边||右边插入一串数据
lpush key1 v1 v2 v3
rpush key2 1 2 3
//key1 : v3 v2 v1
//key2 : 1 2 3
从左边||右边弹出一个数据(即删除)
lpop key1
//key1 : v3 v2 v1
//弹出v3
rpop key2
//key2 : 1 2 3
//弹出3
从key1的右边弹出一个值,插入到key2的左边
rpoplpush key1 key2
//key1 : v3 v2 v1
//key2 : 1 2 3
rpoplpush key1 key2
//key1 : v3 v2
//key2 : v1 1 2 3
按照索引下标获取元素(从左到右)
lrange key 起始索引 截止索引
lrange key 起始索引 -1//表示截止索引为list尾
//例key2 : 1 2 3
lrange key 0 -1
//返回"1" "2" "3"
通过索引获取某个元素
lindex key 索引
//例key2 : 1 2 3
lindex key2 -1
//返回"3"
获取列表的长度
llen key
//例key2 : 1 2 3
llen key2
//返回3
在某个元素的前|后加上一个值
linsert key before 元素 被加上的值
linsert key after 元素 被加上的值
//例key2 : 1 2 3
linsert key2 before 1 0
//key2 : 0 1 2 3
从左边向右删除n个value
lrem key n 值
//例key2 : 1 2 1 3 1
lrem key2 3 1
//例key2 : 1 2 3
/**
*特别注意
*n为正整数:代表从左向右删除n个
*n为负整数:代表从右向左删除|n|个
*n为0: 代表删除所有要删除的value
*/
set类型:无序,不重复
将一个或多个member元素加入到集合key中,已经存在于集合的member元素将被忽略
sadd key v1 v2 v3
//例
sadd k1 1 2 3
//k1集合里的元素有1 2 3,无序
取出set集合所有的元素
smembers key
//例
smember k1
//"1" "2" "3"
判断set集合中是否有value值
sismember key value
//例 k1集合里的元素有1 2 3,无序
sismember k1 3
//返回1:代表有
//返回0:代表没有
返回set集合中的元素个数
scard key
//例 k1集合里的元素有1 2 3,无序
scard k1
//返回3
随机从set集合中吐出一个值,即删除
spop key
//例 k1集合里的元素有1 2 3,无序
spop k1
/吐出1或2或3
删除set集合中的某个或某些个元素
srem key v1 v2 v3 ...
//例 k1集合里的元素有1 2 3,无序
srem k1 2 3
//返回2:代表删除了两个元素
随机从set集合中取出n个值,但是不会删除
srandmember key n
//略
返回两个set集合的公共元素
sinter key1 key2
//略
返回两个set集合的并集
sunion key1 key2
//略
返回两个set集合的差集key1 - key2
sdiff key1 key2
//略
hash类型(map)
创建一个hash
hset key fieId value
/**
*key:代表redis里面的键
*fieId:代表hash里面的键(属性)
*value:代表hash里面的值(属性值)
*/
//例
hset userInfo user:1010:name chenli
批量设置hash值
hmset key1 fieId1 value1 key2 fieId2 value2
//例
hset userInfo user:1010:name chenli user:1010:phone 133...
获取某个hash的某个fieId的值
hget key fieId
//从key的这个hash中获取fieId这个键的值
//例
hget userInfo user:1010:name
//返回"chenli"
判断某个hash中是否存在fieId这个键
hexists key fieId
//例
hexists userInfo user:1010:name
//返回1:代表存在
//返回0:代表不存在
获取hash中所有的fieId
hkeys key
//例
hkeys userInfo
//返回"user:1010:name" "user:1010:phone"
获取hash中所有的value
hvals key
//例
hvals userInfo
//返回"chenli" "133...."
获取hash中所有的键值对
hgetall key
//例
hgetall userInfo
/**返回
*"user:1010:name"
*"chenli"
*"user:1010:phone"
*"133...."
*/
将hash中的fieId的值加上 | 减去一个值
hincrby key fieId 正数 //加上一个值
hincrby key fieId 负数 //减去一个值
//例略
为fieId赋值为value,当且当fieId不存在的时候起作用
hsetnx key fieId value
//例略
//返回1:代表成功
//返回0:代表fieId已经存在,不赋值
zset类型:有序,不重复,根据评分从低到高来排序
向zset集合中插入一个或多个member元素及其评分
zadd key score1 v1 score2 v2 score3 v3
//例
zadd testzset 100 v1 20 v2 1 v3
//返回3:插入元素的数量
根据索引查询zset集合中的元素,和list类似
zrange key 开始索引 截止索引
//例
zrange testzset 0 -1
//"v3" "v2" "v1"
特殊情况
/**
*相同元素不同分数,会将分数替换(更新),元素不变
*
*不同元素相同分数,可以正常的加入
*/
根据分数的范围来查询元素,返回的结果从小到大
zrangebyscore key 最小值 最大值
//例 100 v1 20 v2 1 v3
zrangebyscore testzset 10 20
//"v2"
根据分数的范围来查询元素,返回的结果从大到小
zrevrangbyscore key 最大值 最小值
//例 100 v1 20 v2 1 v3
zrangebyscore testzset 100 0
//v1 v2 v3
为元素的分数加上增量
zincrby key 增量 value
//例 100 v1 20 v2 1 v3
zincrby testzset 100 v1
//返回200
删除zset集合下,指定的元素
zrem key value
//例 100 v1 20 v2 1 v3
zrem testzset v1
//返回1:代表成功
//返回0:代表失败
统计zset集合,在指定的分数范围内的元素个数
zcount key 最小值 最大值
//例 100 v1 20 v2 1 v3
zcount testzset 1 20
//2
返回value在zset集合中的排名,根据分数,从0开始
zrank key value
//例 100 v1 20 v2 1 v3
zrank testzset v2
//1
spring boot整合redis
引入依赖
<!-- 引入redis启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
在默认配置文件中配置连接redis数据库的基本信息,将redis作为缓存需要的配置
#设置redis服务器地址,默认端口6379
spring.redis.host=127.0.0.1
#设置redis的密码
spring.redis.password=123456
#缓存类型设置为redis
spring.cache.type=redis
#设置redis缓存超时时间ms
spring.cache.redis.time-to-live=60000
#设置redis是否缓存空值null
spring.cache.redis.cache-null-values=true
测试redis
@Autowired
private StringRedisTemplate stringRedisTemplate;//操作的k-v都是字符串
@Autowired
private RedisTemplate redisTemplate;//操作的k-v都是对象
@Test
void test1() {
stringRedisTemplate.opsForValue().set("k2","321");
System.out.println(stringRedisTemplate.opsForValue().get("k1"));
}
可以将对象bean序列化存入到redis
//对象类需要继承Serializable接口,目的是使用jdk的序列化工具序列化,不过这时的序列化,是我们看不懂的,还需要进一步处理
@Data
@Component
public class Person implements Serializable {//implements Serializable使用jdk默认的序列化
private String name;
private String phone;
}
/****************************/
//需要写一个配置类
@Configuration
public class MyRedisConfig {
@Bean
public RedisTemplate<Object, Person> personRedisTemplate(
RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
RedisTemplate<Object, Person> template = new RedisTemplate<Object, Person>();
template.setConnectionFactory(redisConnectionFactory);
Jackson2JsonRedisSerializer<Person> serializer = new Jackson2JsonRedisSerializer<Person>(Person.class);
template.setDefaultSerializer(serializer);
return template;
}
}
/***************************/
@Autowired
private RedisTemplate<Object, Person> redisTemplate;
/*****************************/
//使用示例
@Test
void test1() {
person.setName("chen");
person.setPhone("123");
redisTemplate.opsForValue().set("k",person);
System.out.println(redisTemplate.opsForValue().get("k"));
}