——memcache和memcached的区别:
memcache是项目的名称,
memcached是memcache服务器端可以执行文件的名称
——memcache的基本命令:
get 获取一个指定key的值
set 如果一个不存在则添加 如果存在则更新(重新赋值) 是add方法和replace 方法的结合体。
delete 删除一个key
add 添加一个key
replace 更新(update)
prepend在一个值的前面追加
stats查看memcache的状态
flush_all 清空memcache里面的所有数据
——Redis
key-value存储系统 nosql数据存储
Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。而Memcached只支持字符串。
-
键、值都为字符串的哈希表[1]
-
与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。
Redis根本是使用内存存储,持久化的关键是这三条指令:SAVE BGSAVE LASTSAVE
redis是一个内存数据库,通常可以作为缓存使用,常用的命令有:
redis-server 启动数据库,默认端口为6379
redis-cli 连接数据库,默认ip是127.0.0.1,端口是6379
redis-cli -h 127.0.0.1 -p 6380 -a 密码 ,连接数据库,指定主机和端口号
select db 选择数据库,默认是0,默认最大值是16,可以配置文件中修改(databases 16)
move key db 将key移到新数据库db
keys * 查看所有的key
keys pattern 查看匹配的key
exists key 判断对应的key是否存在
get key 获取key对应的值
mget key1 key2 key3 同时获取多个key的值
dump key 返回序列化key的值
ttl key 获取key的剩余生存时间,以秒为单位
pttl key 获取key的剩余生存时间,以毫秒为单位
type key 查看key对应值的类型
randomkey 随机返加一个key
set key value 设定key对应的值value
setex key timeout value 设定key对应的值,同时设定key的超时时间timeout,以秒为单位
setnx key value 当key不存在时,设置key对应的值value
rename key newkey 用键名newkey重命名键key(注意:即使newkey已经存在),重命名后,newkey的值为原key的值
renamenx key newkey 当newkey不存在时,用键名newkey重命名键key,重命名后,newkey的值为原key的值
expire key seconds 设定key的过期时间,单位是秒
pexpire key milliseconds 设定key的过期时间,单位是毫秒
persist key 移出key的过期时间
del key 删除key及其值
del key1 key2 key3 删除多个key及值
flushdb 清空当前数据库的数据
redis和memecache的不同在于:
1、存储方式:
memecache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小。redis主从复制 重启后数据不会丢失,重启后再次加载使用。
redis有部份存在硬盘上,这样能保证数据的持久性,支持数据的持久化,即master-slave模式的数据备份。
2、数据支持类型:
redis在数据支持上要比memecache多的多。提供list,set,hash,zset,string等数据结构的存储
3、使用底层模型不同:
新版本的redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。
4、运行环境不同:
redis目前官方只支持LINUX 上去行,从而省去了对于其它系统的支持,这样的话可以更好的把精力用于本系统 环境上的优化。