getset key value:先获取该key的值,然后再设置该key的值。
incrby key increment:将指定的key的value原子性增加increment,如果该key不存在,初始化这个值为0,在incrby之后,该值为increment。如果该值不能转成整型,如hello则失败并返回错误信息。
decrby key decrement: 将指定的key的value原子性减少decrement,如果该key不存在,初始化值为0,在decrby之后,该值为-decrement。如果该值不能转成整型,如hello则失败并返回错误信息。
append key value:拼凑字符串。如果该key存在,则在原有的value后追加该值;如果该key不存在,则重新创建一个key/value
2、散列类型-------------HashMap
Redies中的Hash类型可以堪称具有String Key和String Value的map容器。所以该类型非常适合于存储键值对象的信息。每一个Hash可以存储4294967295个键值对。
增 hset 集合名 键 值
hmset 集合名 键 值 键 值 键 值.............
删 hdel 集合名 键(0 表示删除字段不存在)
del 集合名 (删除整个list)
改 hset 集合名 已经存在的键 新值
查 hget 集合名 键
hmget 集合名 键1 键2........
hgetall 集合名(所有键值对)
hincrby key field increment: 设置key中field的值增加increment(hash中没有hincr)
hexists key field: 判断指定的key中的field是否存在,存在返回1,不存在返回0
hlen key: 获取key所包含的field的数量
hkeys key: 获得所有的key
hvals key: 获得所有的value
增 lpush list01 a b c(从头部left插入数据)
rpush list02 1 2 3(从尾部right插入数据)
删 lpop list01 (从头部移除或弹出)
rpop list01(从尾部移除)
改 lset list02 1 100(修改索引为1的位置的值为100)
查 lrange list01 0 2(0和2表示索引)
lrange list02 0 -1(-1表示倒数第一位)
llen key:返回指定key关联的链表中元素的数量。
lpushx key value:仅当参数中指定的链表存在时,才能向它的头部插入数据,如果该key链表不存在,将不进行插入。
rpushx key value:在该list的尾部添加元素。
lrem key count value:删除count个值为value的元素,如果count大于0,从头到尾遍历并删除count个值为value的元素,如果count小于0,则从尾向头遍历并删除。如果count等于0,则删除链表中所有等于value的元素。
lset key value:设置链表中的index的脚标的元素值,0代表链表的头元素,-1代表链表的尾元素。操作链表的脚标不存在则抛出异常
linsert key before|after pivot value:在pivot元素前或后插入value这个元素,如果pivot元素不存在,则返回-1
rpoplpush key key:将链表中的尾部元素弹出并添加到头部。 通常被用于消息队列中(消费者与生产者)
增 sadd set01 hello test aha test
删 srem set01 xxxx
查 smembers set01
sismember set01 xxx--判断xxx是否在set01中存在
sinter set02 set03 (取交集)
sunion set02 set03(取并集)
sdiff set02 set03(属于set02不属于set03的数据)
scard set02 :获取set中成员的数量
srandmember set02:随机返回set中的一个成员
sdiffstore my1 mya1 mya2:将mya1 mya2....相差的成员存储在my1上。
sinterstore my1 mya1 mya2:将mya1 mya2.....返回的交集存储在my1上。
sunionstore my1 mya1 mya2:将返回的并集存储在my1上。
增 zadd tree01 60 huluwa 99 niuniu 30 mantou (按照前面的数字进行排序,输出只有字符串)
删 zrem tree01 huluwa
zremrangebyrank tree01 0 1(按照名次区间删除数据,包左包右)
zremrangebyscore tree01 30 50(按照分数区间删除数据)
改 zadd test01 50 mantou(新分数旧名称)
查 zrange test01 0 -1
zrange test01 0 -1 withscores(带着分数)
zscore test01 niuniu(获取分数)
zcard test01 (返回元素个数)
zrevrange test01 0 -1 withscores:照元素分数从大到小的顺序返回索引从0到-1之间所有元素(包含两端的元素)
zrangebyscore test01 min max withscores:返回分数在[min,max]的成员并按照分数从低到高排序。
zincrby mytest 3 lisi:设置指定成员的增加的分数,返回值是更改后的分数。
zcount mytest 33 80:获取分数在此成绩之间的成员个数。
zrank key member: 返回成员在集合中的排名.()
6、keys
增 添加任意数据结构数据时,都添加key
删 del xxxxx
改 rename list02 02list----------修改名字
查 keys *-----------------------------查询所有
type 键-----------------------对应的数据类型
exits 键-----------------------判断键是否存在
expire 键 时间--------------设置生命周期,存活时间
ttl 键---------------------------查询倒计时间,如果已死就是-2,没有设置存活时间,就返回-1
7、Java与redis交互的实现的API为Jedis用于Java程序与Redis数据库的交互,与JDBC作用一致。
使用数据库连接池
//1、创建配置对象
GenericObjectPoolConfig pc = new JedisPoolConfig();
pc.setMaxTotal(30);
pc.setMaxIdle(10);
....
//2、创建连接池
JedisPool pool = new JedisPool(pc,"ip",6379);
//3、获取并使用
Jedis j = pool.getResource();
j.set("name","xixi");
//4、使用资源
fianlly {
if(j != null){
j.close();
}
if(pool != null){
pool.close();
}
}
8、redis特性
A、关于DataBase
1)、虽然redis没有建库操作,不过内置了16个数据库db0-db15,默认使用db0
2)、其余库使用 select 库编号
3)、数据库数据移植 move xxxxx 库编号
B、服务器命令
ping 测试连接是否成功 成功就是pong
echo: 在命令行打印一些内容
select 数据库编号0-15选择数据库
quit:退出连接。
dbsize: 返回当前数据库中key的数目。
info: 获取服务器的信息和统计。
flushdb:删除当前选择数据库中的所有key
flushall:删除所有数据库中的所有key
C、信息的订阅与发布
客户端订阅某方面的数据
服务器端产生对应数据之后,客户端可以马上接受到
订阅1:
subscribe 关键字--------客户端
publish 关键字 xxxxx
订阅2:
psubscribe 关键字* -------客户端
publish 关键字 xxxxxx
D、redis事务的特征
A、在事务中的所有命令都将会被串行化的顺序执行,事务执行期间,Redis不会再为其他客户端的请求提供任何服务,从而保证了事务中所有命令被原子的执行。
B、和关系型数据库中的事务相比,在Redis事务中如果有一条命令执行失败,其后的命令仍然会被继续执行。
C、我们可以通过multi命令开启一个事务,有关系型数据库开发经验的人可以将其理解为”begin transaction”语句。在该语句之后执行的命令都将被视为事务之内的操作,最后我们可以通过执行exec/discard命令来提交/回滚该事务内的所有操作。这两个Redis命令可被视为等同于关系型数据库中的commit/rollback语句。
multi:开启事务用于标记事务的开始,其后执行的命令都将被存入命令队列,知道执行exec时,这些命令才会被原子的执行。
exec:提交事务
discard:事务回滚
9、redis持久化Redis的高性能是由于其将所有数据都存储在了内存中,为了使Redis在重启之后仍能保证数据不丢失,需要将数据从内存中同步到硬盘中,这一过程就是持久化。Redis支持两种方式的持久化,一种是RDB方式,一种是AOF方式。可以单独使用其中一种或将二者组合使用。
1、ROB持久化(默认支持,无需配置)
该机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘。
序列化后的文件dump.rdb文件
时间间隔是动态的
save 60 10000-------一分钟内超过10000个操作就备份。
save 300 10--------五分钟内超过10个操作就备份。
save 900 1----------十五分钟有1个操作就备份。
2、AOF持久化-------AppendOnly File(数据追加到文件)
该机制将以日志的形式记录服务器所处理的每一个写操作,在Redis服务器启动之初会读取该文件重新构建数据库,以保证启动后数据库中的数据是完整的。
提供了三种同步策略,即每秒同步(everysec异步,也会丢失这1秒的数据)、每修改同步(always同步)和不同步(no)。
A、默认无启用
vi redis.conf------>appendonly yes
B、重启数据库,是配置生效。
C、访问数据库,使用的SQL语句就会被记录到appendonly.aof文件中。
3、数据恢复
进入到appendonly.aof更改删除操作的命令。重启服务就可以开启了。